如何在 Windows 命令行中转义空格?

如何在 Windows 命令行中转义空格?

我有类似的问题如何在 Windows 命令行中转义空格而不使用引号?

但似乎我不能使用插入符号

C:\>C:\Program^ Files^ (x86)\Adobe\Reader^ 11.0\Reader\AcroRd32.exe
C:\Program Files is not recognized as an internal or external command, operable program or batch file.

cd 工作正常:

C:\>cd C:\Program^ Files^ (x86)\Adobe\Reader^ 11.0\Reader\
C:\Program Files (x86)\Adobe\Reader 11.0\Reader>

我正在使用 C++ 应用程序调用 Adob​​e Reader

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" ");
system(cmd.ToCStr());

没问题,Adobe Reader 已启动。但是当我添加另一个转义引号以将参数路径传递给 pdf 时

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"");
cmd.Append("A\\B with space\\C\\test.pdf");
cmd.Append("\"");
system(cmd.ToCStr());

我有

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

这是怎么回事?为什么我不能多次使用插入符号或转义引号?

(天哪,我太讨厌窗户了)

答案1

我相信您应该使用 CreateProcess() 函数,而不是启动 cmd.exe 程序然后告诉它运行 acrobat。

设置起来比较复杂,但您不需要通过 cmd 的奇怪的命令行处理。

更新:我只是快速浏览了一下,因为其他人也有类似的问题,它提供的答案可能会有所帮助:https://stackoverflow.com/questions/486087/how-to-call-an-external-program-with-parameters

答案2

我解决了:

对于 system() 我必须使用两个转义引号

UniString cmd("\"\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"D:\\Second Path\\Foo\\Bar\"\");
system(cmd.ToCStr());

或使用 WinExec() 效果更佳

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"D:\\Second Path\\Foo\\Bar\");
WinExec(cmd.ToCStr(),SW_SHOW);

答案3

将整个字符串用双引号引起来,如下所示:"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

相关内容