我想从一个批处理文件启动一个 Windows 可执行文件,其中可执行文件的路径存储在一个变量中。
@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
中的空格处终止。
最佳答案
您应该将代码更改为:
@echo off
set "qtpath=C:\Program Files\Qt\5.7\mingw53_32\bin"
set "execpath=%qtpath%\windeployqt.exe"
echo "%execpath%"
"%execpath%" --someparams
SPACE,和TAB一样,,
, ;
, =
, VTAB(垂直制表符,ASCII 0x0B
),FF(换页,ASCII 0x0C
)和NBSP(不间断空格,ASCII 0xFF
) 构成token separators在命令提示符中 cmd
.为了避免标记化,请将您的路径包含在 ""
之间.这也避免了像 ^
这样的特殊字符的麻烦。 , (
and )
, &
, <
, >
and |
.
set
中的引号命令行再次避免了特殊字符的麻烦;它们不会成为变量值的一部分,因为它们包含了整个赋值表达式。请注意,此语法需要 command extensions启用,但这是默认设置。
我建议不要将引号包含到变量值 ( set VAR="some value"
) 中,因为这样您可能会遇到问题,尤其是在由于不需要的(双)引号(例如, echo "C:\%VAR%\file.txt"
返回 "C:\"some value"\file.txt"
)。
关于windows - 使用包含空格的变量路径从批处理文件调用 .exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101129/