2017-06-06 25 views
1

在批處理文件中,我想將一個變量設置爲程序的單行輸出 - 這是一個在多個問題和互聯網資源中解釋的任務。對於/ F:文件名和參數中的空格

在我具體的任務,我想執行的命令

"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe" 

正如你所看到的,因爲我要執行的程序路徑,FileVersion.exe包含空格,並交給FileVersion.exe第二個參數包含一個完整的有空間的路徑也是如此。

當我通過命令行直接調用上述命令或在批處理文件中使用CALL時,它正確執行該程序將打印出預期的輸出。

現在,攻克執行我用後續批處理命令程序的輸出

FOR /F "usebackq tokens=* delims=" %%i IN (`"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe"`) DO (
    echo %%i 
) 

FOR documentation

usebackq  Use the alternate quoting style:       
      - Use double quotes for long file names in "filenameset". 
      - Use single quotes for 'Text string to process' 
      - Use back quotes for `command to process` 

我認爲我正確地做這個用反引號周圍的命令,並在文件名周圍使用引號。

然而,呼叫失敗消息(德國翻譯)

The command "D:\My" is either incorrect or couldn't be found. 

我覺得這點與逃避的空間問題。

奇怪的部分:如果我要麼替換要調用的exe的路徑,要麼使用路徑爲sans的空間,它的工作原理。因此,無論

FOR /F "usebackq tokens=* delims=" %%i IN (`FileVersion.exe /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe"`) DO (
    echo %%i 
) 

FOR /F "usebackq tokens=* delims=" %%i IN (`"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n Test.exe`) DO (
    echo %%i 
) 

工作。

爲什麼兩個引號轉義的字符串不能在同一個命令中工作,我該如何解決?

+0

我不知道,我看到使用反引號的宗旨! – Compo

+2

看看[this](https://stackoverflow.com/q/22636308/2861476)是否解決了您的問題。 –

+0

Compo:這沒有什麼區別。 @MCND你的。我確信必須有一個資源來回答它,但在篩選示例時我沒有找到它。謝謝。我會將其標記爲重複。 – Jens

回答

0

我不會用usebackq和先解決複雜的路徑:

@Echo off 
Pushd "D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release" 
FOR /F "tokens=*" %%i IN (
    ' FileVersion.exe /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe" ' 
) DO echo %%i 
PopD