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

标签 windows batch-file cmd

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

相关文章:

c++ - Visual Studio 平台工具集与 Windows SDK

windows - 为什么批处理文件中的命令 "Timeout"突然不起作用了?

batch-file - 无法使用 colorEcho 批量正确打印 ä、ç 或 ã

java - 如何用java模拟真实的鼠标点击?

Windows 批处理文件 : Convert Structures into Single Lines Strings

batch-file - 批处理文件中环境变量存在/不存在时的 if 语句

c - 在不编译的情况下获取 C 程序的输出

用于读取 .ini 文件的 Windows 批处理脚本

php.exe 无法识别 :create webapp

c# - 我应该如何运行后台服务来为 Windows 世界中的网站创建导出文件?