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

时间:2016-08-23 12:23:45

标签: 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

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

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

看起来不知何故,字符串在Program Files的空格处终止。

2 个答案:

答案 0 :(得分:6)

您应该将代码更改为:

@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 { {1}})在命令提示符0xFF中构成token separators。要转义标记化,请将您的路径括在cmd之间。这样可以避免使用^( and )&, <, > and |等特殊字符时出现问题。

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

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

答案 1 :(得分:2)

你是完全正确的。如果要执行的文件的路径包含空格,则必须用引号将其括起来:

@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