2014-10-12 13 views
1

Я работаю над пакетным скриптом и пытаюсь заставить его работать в каталогах, содержащих пробелы. В конкретной строке я следующий цикл:Сбои с двойными кавычками и для/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 

Эта команда делает удивительно, что это должен.

Почему происходит ошибка и как достичь желаемой функциональности?

ответ

1

Включите всю команду, в пределах backquotes, в кавычки.

C:\Users\User>for /F "usebackq tokens=*" %A in (`""C:\Users\Use r\Desktop\Editor\UEd\UEd.exe" -md5 "d:\Somefile""`) do echo %A 

Удаление последнего заднего кадра, возможно, сработало, если параметров нет.

+1

Хотя «usebackq» и «backquotes» теперь лишние, можно использовать одинарные кавычки. – Magoo

+0

@fredasw: Как я могу это исправить? 'for/F" usebackq "% A in ('" c: \ Test Folder \ testfile "') установить/a size =% ~ zA'? Для папок без пробелов он отлично работает. –