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

7
我想从批处理文件中启动一个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个回答

14

你应该将你的代码更改为这样:

@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)在命令提示符cmd中构成了分隔符。要避免被作为分隔符解析,需要用""将路径括起来。这样也避免了特殊字符(如^()&<>|)带来的麻烦。

set 命令行中的引号同样可以避免特殊字符的问题;它们不会成为变量值的一部分,因为它们将整个赋值表达式括起来。注意,这种语法需要启用命令扩展,但这通常是默认设置。

我建议不要将引号包含在变量值中(例如set VAR="some value"),因为这样可能会在连接字符串时导致意外的(双)引号(例如echo "C:\%VAR%\file.txt" 返回 "C:\"some value"\file.txt")。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接