我有类似的问题如何在 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++ 应用程序调用 Adobe 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"