从包含空格的变量路径的批处理文件中调用.exe

str*_*nmn 2 windows batch-file

我想从批处理文件中启动一个Windows可执行文件,其中可执行文件的路径存储在一个变量中.

@echo off

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

echo %execpath%

%execpath% --someparams
Run Code Online (Sandbox Code Playgroud)

不幸的是,执行我的脚本会引发错误:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

看起来不知何故,字符串在空间中被终止Program Files.

asc*_*pfl 6

您应该将代码更改为:

@echo off

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

echo "%execpath%"

"%execpath%" --someparams
Run Code Online (Sandbox Code Playgroud)

SPACE,像也TAB,,,;,=和非休息空间(ASCII 0xFF)构成令牌隔板在命令提示cmd.要逃避标记化,请在两者之间包含您的路径"".这也避免了特殊字符,如烦恼^,(),&,<,>|.

set命令行中的引号再次避免了特殊字符的问题; 它们不会成为变量值的一部分,因为它们包含整个赋值表达式.

我建议不要将引号包含在变量值(set VAR="some value")中,因为这样会遇到问题,尤其是在由于不需要的(双引号)引用而连接字符串时(例如,echo "C:\%VAR%\file.txt"返回"C:\"some value"\file.txt").