如果我这样做:
my program = "C:\\MyPath\\MyProg.exe";
system(("start", $program));
MyProg 启动得很好,我的脚本在 system() 命令之后恢复。但是如果路径中有空格,例如
my program = "C:\\My Path\\MyProg.exe";
system(("start", $program));
它似乎运行 cmd,而不是 MyProg。
我尝试过引用以下内容:
my program = "C:\\My Path\\MyProg.exe";
system(("start", '"' . $program . '"'));
但似乎没有任何帮助。
当然,我可以使用 fork() 来解决它,但我想了解为什么我不能传递带有空格作为参数的路径。
最佳答案
这是因为内置的 start
命令在引用时有点奇怪。您可以使用 start "C:\My Path\MyProg.exe"
在命令行上重现此内容,并看到相同的结果。要正确执行它,您需要在其前面添加一组空引号:start """C:\My Path\MyProg.exe"
。
所以你的最终结果应该是:
my program = "C:\\My Path\\MyProg.exe";
system('start "" "' . $program . '"');
编辑以包含池上的建议。我的 Perl 有点生疏了,因为我已经很多年没有使用它了。
关于perl - 如何从 Perl 启动路径中带有空格的 Windows 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681055/