2011-06-24 56 views
13

這是我遇到的問題:批處理文件:因爲如果路徑中有空格/ F不起作用

@ECHO OFF 

REM If this batch file is run in the same directory as "command.exe" then the 
REM following line will work. 
FOR /F "usebackq" %%A IN (`command.exe "C:\File Being Passed as a Parameter.txt"`) DO ECHO %%A 

REM The following line does not work no matter where this batch file is run. 
FOR /F "usebackq" %%A IN (`"C:\Folder With Spaces\command.exe" "C:\File Being Passed as a Parameter.txt"`) DO ECHO %%A 

我想用來存儲該批處理文件的地方我想,而不是被迫店它位於與command.exe相同的文件夾中。有什麼建議麼?

回答

23

程序名稱前添加CALL

FOR /F "usebackq" %%A IN (`CALL "C:\Folder With Spaces\command.exe" "C:\File Being Passed as a Parameter.txt"`) DO ECHO %%A 
+1

爲什麼使用'call'有EXE? – jeb

+4

@jeb:在這種特殊情況下,解決相關問題。 –

+0

你是對的,我測試了它,似乎只有'調用'的方式工作 – jeb

11

callAndriy M是聰明,工作正常,但我想了解這裏的問題。

此問題是由cmd.exe引起的,因爲你可以在cmd /help

....
的第一個和最後報價閱讀將被刪除,當有 不完全是兩個單引號線。
...

因此,有也只是增加了兩個額外的引號

FOR /F "usebackq=" %%A IN (`""C:\Folder Space\myCmd.exe" "Param space""`) DO (
    ECHO %%A 
) 
+0

完全正確!只是在這裏添加一些例子。這是有效的:'FOR/F「usebackq」%A IN(\'cmd.exe/C「findstr.exe」/?\')DO @ECHO%A'(引號只有* 1 *參數)。這也適用:'FOR/F「usebackq」%A IN(\'「cmd.exe」/ C findstr.exe /?\')DO @ECHO%A'(引號*只在命令周圍)。這樣做*不工作,直到另外一對雙引號被添加,如你所建議的:'FOR/F「usebackq」%A IN(\'「cmd.exe」/ C「findstr.exe」/?\') DO @ECHO%a'。 –

+1

不需要使用USEBACKQ,並且最好使用'^「」c:\ folder space \ myCmd.exe「」param with^poison char「^」'',以便有毒字符仍能正確引用。 – dbenham

0

仔細另一種解決方案:

使用 '呼叫'(如圖舍甫琴科M)似乎是最安全的選擇。

我發現添加前導和尾隨雙引號(如jeb建議的可能解決方案)有問題。

問題:

for /f "delims=" %%i in ('""C:\path with spaces\hello.bat" "filename with an & ampersand.jpg""') do (echo output=%%i)

的cmd.exe的輸出:& was unexpected at this time.

解決方案:

for /f "delims=" %%i in ('call "C:\path with spaces\hello.bat" "filename with an & ampersand.jpg"') do (echo output=%%i)

相關問題