2016-08-23 24 views
2

実行ファイルへのパスが変数に格納されているバッチファイルからWindows実行ファイルを起動します。可変パスを含むバッチファイルから.exeを呼び出す

'C:\Program' is not recognized as an internal or external command, operable program or batch file. 

は何とか文字列がProgram Filesのスペースで終了します次のようになります。残念ながら、私のスクリプトを実行

@echo off 

set qtpath=C:\Program Files\Qt\5.7\mingw53_32\bin 
set execpath=%qtpath%\windeployqt.exe 

echo %execpath% 

%execpath% --someparams 

エラーがスローされます。

答えて

5

あなたは、このようにコードを変更する必要があります。また、TABのように、

@echo off 

set "qtpath=C:\Program Files\Qt\5.7\mingw53_32\bin" 
set "execpath=%qtpath%\windeployqt.exe" 

echo "%execpath%" 

"%execpath%" --someparams 

SPACE,;,=と非区切りスペース(ASCII 0xFF)はを構成しますコマンドプロンプトでcmdを入力します。トークン化をエスケープするには、パスを""の間に囲みます。これにより、^,( and ),&, <, > and |などの特殊文字の問題も回避されます。

setコマンドラインの引用符は、特殊文字の問題を回避します。代入式全体を囲むため、変数の値にはなりません。

私は(例えば、echo "C:\%VAR%\file.txt"リターン"C:\"some value"\file.txt")不要(ダブル)二重引用符による文字列を連結するとき、あなたが特に問題に実行する可能性があるため、変数の値(set VAR="some value")に引用符を含めるようにをないことをお勧めします。

1

あなたは完全に正しいです。実行するファイルへのパスにスペースが含まれている場合は、引用符で囲む必要があります。

@echo off 

set qtpath=C:\Program Files\Qt\5.7\mingw53_32\bin 
set execpath="%qtpath%\windeployqt.exe" 

echo %execpath% 

%execpath% --someparams 

これは動作するはずです。

あなたが引用符で%execpath%を囲むときにも動作します:

"%execpath%" --someparams 
関連する問題