如何从Perl的路径中启动带有空格的Windows程序?

时间:2011-04-15 18:47:58

标签: perl winapi

如果我这样做:

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()来解决它,但我想知道为什么我不能传递一个以空格为参数的路径。

3 个答案:

答案 0 :(得分:3)

这是因为内置的start命令在引用方面有点奇怪。您可以使用start "C:\My Path\MyProg.exe"在命令行上重现此操作,并查看相同的结果。要正确执行它,您需要一组空引号:start "" "C:\My Path\MyProg.exe"

所以你的最终结果应该是:

my program = "C:\\My Path\\MyProg.exe";
system('start "" "' . $program . '"');

已编辑以包含来自ikegami的suggesstion。我的perl有点生疏,因为我多年没用过它了。

答案 1 :(得分:0)

尝试......

my program = "C:/\"My Path\"/MyProg.exe";

答案 2 :(得分:0)

我不是perl专家,但我找到了以下链接。

http://bytes.com/topic/perl/answers/697488-problem-system-command-windows