Batch file 查找文件,然后将其名称用作变量命令提示符

Batch file 查找文件,然后将其名称用作变量命令提示符,batch-file,command-prompt,Batch File,Command Prompt,如何查找文件并为变量指定文件名 例如: 假设我正在下面的位置查找文件。文件名不断变化,选择正确文件的唯一方法是在文件名字符串中查找今天的日期: X:\VoyagerBackups\PickupLocation\tsiuiolou_live_Full_PCV048DB42_201812140000.Lts.bak 以下是我到目前为止在.bat文件中的内容。如果输入硬代码文件名,执行将按预期工作: echo on Rem Determine date Set mm1=%date:~4,2% Set

如何查找文件并为变量指定文件名

例如: 假设我正在下面的位置查找文件。文件名不断变化,选择正确文件的唯一方法是在文件名字符串中查找今天的日期:

X:\VoyagerBackups\PickupLocation\tsiuiolou_live_Full_PCV048DB42_201812140000.Lts.bak
以下是我到目前为止在.bat文件中的内容。如果输入硬代码文件名,执行将按预期工作:

echo on
Rem Determine date
Set mm1=%date:~4,2%
Set dd1=%date:~7,2%
Set yyyy1=%date:~10,4%

Set rundate1=%yyyy1%%mm1%%dd1%

Set executefile1=tsiuiolou_live_Full_PCV048DB42_%rundate1%0000.Lts.bak
set downloadfile=tsiuiolou_live_Full_PCV048DB42_%rundate1%0000.bak

extractor64.exe -F %executefile1% -E %downloadfile%

move %executefile1% X:\VoyagerBackups\BackupFiles

不要使用依赖于%date%变量的区域设置/用户设置

改用
wmic
或PowerShell,它们都有更稳定的方法

:: Q:\Test\2018\12\14\SO_53787816.cmd
@Echo off

for /f "usebackq" %%A in (`
  powershell -NoP -C "(Get-Date).ToString('yyyyMMdd')"
`) Do Set "Today1=%%A"
Echo PowerShell today:%Today1%

for /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set "Today2=%%A"
Set "Today2=%Today2:~0,8%"
Echo       wmic today:%Today2%

Set "Base=X:\VoyagerBackups\PickupLocation\"
PushD "%Base%" || (Echo can't find base:%Base%&Pause&Goto :Eof)

For /f "delims=" %%A in ('Dir /B "*%Today1%*" ') Do (
    Echo found file:%%~fA
)
PopD

不要使用依赖于%date%变量的区域设置/用户设置

改用
wmic
或PowerShell,它们都有更稳定的方法

:: Q:\Test\2018\12\14\SO_53787816.cmd
@Echo off

for /f "usebackq" %%A in (`
  powershell -NoP -C "(Get-Date).ToString('yyyyMMdd')"
`) Do Set "Today1=%%A"
Echo PowerShell today:%Today1%

for /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set "Today2=%%A"
Set "Today2=%Today2:~0,8%"
Echo       wmic today:%Today2%

Set "Base=X:\VoyagerBackups\PickupLocation\"
PushD "%Base%" || (Echo can't find base:%Base%&Pause&Goto :Eof)

For /f "delims=" %%A in ('Dir /B "*%Today1%*" ') Do (
    Echo found file:%%~fA
)
PopD

你能解释一下wmic或PowerShell比CP/批处理文件更稳定是什么意思吗?我的回答中的前两个
for
命令演示了PowerShell和wmic如何以
yyyyMMdd
格式=>
%Today1%
%Today2%
获取日期。最后一个for显示了如何获取名称中包含此日期的文件。您能解释一下wmic或PowerShell比CP/批处理文件更稳定是什么意思吗?我回答中的前两个
for
命令演示了如何使用PowerShell和wmic以
yyyyMMdd
格式=>
%Today1%
%today 2%
。最后一个for显示如何获取名称中包含此日期的文件。