Найти файл и затем использовать его имя в качестве переменной командной строки - PullRequest
0 голосов
/ 15 декабря 2018

Как мне найти файл и назначить имя файла переменной?

Пример: допустим, я ищу файл в расположении ниже.Имя файла постоянно меняется, и единственный способ подобрать правильный файл - найти текущую дату в строке имени файла:

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

1 Ответ

0 голосов
/ 15 декабря 2018

Не используйте переменную% 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
...