2016-08-23 125 views
2

我想從批處理文件啓動一個Windows可執行文件,其中可執行文件的路徑存儲在變量中。從包含空格的可變路徑的批處理文件調用.exe

@echo off 

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

echo %execpath% 

%execpath% --someparams 

不幸的是執行我的腳本拋出一個錯誤:

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

看起來莫名其妙的字符串獲取Program Files在空間終止。

回答

5

你應該改變你的代碼如下:

@echo off 

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

echo "%execpath%" 

"%execpath%" --someparams 

SPACE一樣也TAB,;,=和非休息空間(ASCII 0xFF)構成token separators在命令提示符cmd。爲了避免令牌化,請在""之間包含您的路徑。這也避免了特殊字符如^( and ),&, <, > and |的麻煩。

set命令行中的引號再次避免了特殊字符的麻煩;它們不會成爲變量值的一部分,因爲它們包含整個賦值表達式。

我建議包括引號成變量值(set VAR="some value"),因爲這樣你可能會遇到的問題串聯由於不需要的(雙)引號的字符串(例如,echo "C:\%VAR%\file.txt"回報"C:\"some value"\file.txt")時尤爲如此。

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 
相關問題