1

У меня есть цикл for в этом сценарии: https://github.com/ITCMD/Explorer--/blob/master/Explorer--.bat Это выглядит так: (: строка :ModificationID 477 вызывается из строк 308 и 329 в :OtherVersions)

set _ForString=%~1
set _ForString=!_ForString:\=\\!
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=1,2* delims==" %%a in (out.temp) do (set %~2=%%b & echo hello)

где% ~ 1 равно пути к файлу. Это выводит штраф в out.temp как:

(2 blank lines)
LastModified=20181019082634.596899-240
(3 blank lines)

Но цикл for никогда не запускается. Он даже не запускает команду echo. Зачем?

1 ответ1

2

Я смог заставить его работать в соответствии с моим пониманием, используя команду Type а затем перенаправить файл в команду Find и сказать, чтобы он отображал только строки, содержащие символ = , так что, по сути, он анализировал конечные и ведущие пустая строка вокруг значения интересующего файла.

Я не уверен, было ли это так, как tokens и delims были установлены в соответствии с вашим методом фрагмента скрипта, или в цикле FOR /F действительно была проблема с пустыми строками при повторении или если это выполняли завершающие пустые строки, но это вещи, которые кажутся мне логичными. Я уверен, что есть несколько способов справиться с этим тоже.


Сценарий (Обходное решение)

setlocal enabledelayedexpansion
set "_ForString=%~1"
set "_ForString=!_ForString:\=\\!"
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=2 delims==" %%a in ('type out.temp ^| find "="') do (set %~2=%%a)

Примечание: я проверил с ('find "=" out.temp ^| find "="') и, похоже, тоже справился.


Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .