Windows 命令 shell 中文件名引号的问题

Windows 命令 shell 中文件名引号的问题

我正在运行 Windows XP Home SP3。尝试运行此命令:

cmd /c "C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c Win32-temp-Debug\getbuildinfo2.c

它运行正常(忽略确切的程序和文件名)。但是,引用最后一个参数时,我收到错误:

cmd /c "C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c "Win32-temp-Debug\getbuildinfo2.c"

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

当直接运行而不使用时cmd /c,两个命令行均无错误运行。我使用来调试我在 C 程序调用cmd /c时遇到的类似问题。system

这里有什么问题cmd

答案1

help cmd关于引用,有这样的说法:

如果指定了 /C 或 /K,则开关后的命令行其余部分将作为命令行进行处理,其中使用以下逻辑来处理引号(“)字符:

  1. 如果满足以下所有条件,则命令行上的引号字符将被保留:

    • 没有 /S 开关
    • 正好两个引号字符
    • 两个引号字符之间没有特殊字符,特殊字符包括以下字符之一:&<>()@^|
    • 两个引号字符之间有一个或多个空格字符
    • 两个引号之间的字符串是可执行文件的名称。
  2. 否则,旧的行为是查看第一个字符是否是引号字符,如果是,则删除前导字符并删除命令行上的最后一个引号字符,保留最后一个引号字符后的任何文本。

因此,将第一个和最后一个引号加倍,它应该可以起作用:

cmd /c ""C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c "Win32-temp-Debug\getbuildinfo2.c""

相关内容