Я работаю над пакетным скриптом и пытаюсь заставить его работать в каталогах, содержащих пробелы. В конкретной строке я следующий цикл:Сбои с двойными кавычками и для/f
for /f "tokens=*" %%A in ('%~dp0fciv\fciv.exe -md5 %~dp1%FN%') do ...
Если текущий каталог содержит пробелы цикл будет не в состоянии вызвать исполняемый файл. Теперь я ставлю двойные кавычки, чтобы исправить это:
for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 %~dp1%FN%') do ...
Это работает нормально, пока параметр не имеет пробелов. Таким образом, мне нужно также включить его в двойные котировки:
for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 "%~dp1%FN%"') do ...
Но это не работает должным образом. Я сделал дополнительные испытания прямо в CMD:
for /F "tokens=* usebackq" %A in (`"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"`) do echo %A
for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"') do echo %A
Ошибка является: "c:\Test" not recognized as an internal or external command, operable program or batch file.
Я также попытался оставить второй двойные кавычки снова:
for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 d:\Somefile') do echo %A
Эта команда делает удивительно, что это должен.
Почему происходит ошибка и как достичь желаемой функциональности?
Хотя «usebackq» и «backquotes» теперь лишние, можно использовать одинарные кавычки. – Magoo
@fredasw: Как я могу это исправить? 'for/F" usebackq "% A in ('" c: \ Test Folder \ testfile "') установить/a size =% ~ zA'? Для папок без пробелов он отлично работает. –