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

标签 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() 来解决它,但我想了解为什么我不能传递带有空格作为参数的路径。

最佳答案

这是因为内置的 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/

相关文章:

perl - 为什么 SSL 在 Starman 中失败

iphone - linux下编辑二进制plist

perl - 如何使用 Perl 中的关键字将字符串解析为散列?

c++ - 如何以编程方式显示Windows系统(标题栏)菜单

c++ - 如何制作玻璃背景的 window ?

regex - Perl 正则表达式、单词 anchor 和特殊字符

perl - 尝试在 Perl 中使用 splice 删除特定列

c++ - 如何获取卷 GUID

c - 为什么“恢复”、“最小化”、“最大化”通知在不应该发送的情况下都被发送了?

java - JNA映射以将输入/输出缓冲区传递给winapi函数