2017-06-06 9 views
1

バッチファイルでは、プログラムの1行出力に変数を設定したい - 複数の質問とインターネットリソースで説明されているタスク。/F:ファイル名とパラメーターの両方のスペース

私はあなたが、私が実行するプログラムのパスを見ることができるように、 FileVersion.exeにスペースが含まれており、 FileVersion.exeに渡す2番目のパラメータがフルに含まれているコマンドに

"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" 

を実行したい私の特定のタスクに

パスもスペースで区切ります。

上記のコマンドをコマンドラインで直接呼び出すか、バッチファイル内で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 
) 

作品。

引用符で囲まれた2つの文字列が同じコマンドで動作しないのはなぜですか?どのように修正できますか?

+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 
関連する問題