You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake中通过execute_process调用路径含空格的.bat文件

问题原因与解决方案

你遇到的报错是两个解析规则叠加导致的:

  • cmd /c的特殊解析逻辑:如果/c后跟随的参数被引号包裹,cmd会自动删除首尾的一对引号,再将剩余内容按空格拆分执行。你手动给路径加引号后,要么引号被CMake转义变成路径的一部分,要么引号被cmd删除后带空格的路径被拆成多个部分,导致只识别到E:/dev/test就截断。
  • CMake的execute_process参数拆分规则:COMMAND后以空格分隔的每个值会被作为独立参数传递给调用的程序,你额外添加的转义引号会被CMake识别为参数内容的一部分,最终传递给cmd的时候路径带有多余的引号,导致识别失败。

可用解决方案

方案1:直接指定bat文件作为执行命令(推荐)

CMake会自动识别.bat后缀,调用cmd执行,不需要手动写cmd /c,直接用引号包裹带空格的路径即可:

execute_process(
    COMMAND "E:/dev/test folder with spaces/test with spaces.bat"
    # 可选:指定bat执行时的工作目录为bat所在文件夹
    WORKING_DIRECTORY "E:/dev/test folder with spaces"
)

方案2:必须显式调用cmd /c时的写法

如果需要手动控制cmd的调用逻辑,使用CMake的方括号字符串避免转义问题,同时加上VERBATIM参数保证参数传递符合Windows平台规则:

execute_process(
    COMMAND cmd /c [=["E:/dev/test folder with spaces/test with spaces.bat"]=]
    VERBATIM
)

内容的提问来源于stack exchange,提问作者Mathieu Poulin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:09:03