我使用 Windows 中的命令行开发了几个脚本(这是必要的,因为有几个“说”注释需要显示)并使用以下行:
perl "D:/path to script"
一切都很好。但是...
今天早上,我在 Windows 上创建了一系列快捷方式,基本思路是他们可以单击图标,然后 CMD 将打开并开始运行脚本。这就是我被困住的地方!
在快捷方式的目标属性中,我输入了:
C:/system32/cmd.exe D:/path to perl script
这将打开命令行,并将提示符设置为“D:/path to script_”(我还尝试在两个参数之间添加 perl,就像直接在窗口中输入一样。但这没有效果)我尝试在引号中使用“perl D:/path to script”。但这没有用
然后我想知道批处理文件,但是批处理运行后它们似乎会关闭窗口,因此无法显示所说的命令!
我也听说过“pl2bat”,但不知道它是否能让 CLI 在其余程序运行时保持活动状态。
这是在客户端运行,而不是在浏览器中,或将数据发送到服务器,其想法是使用 USB 上的 Perl,它将是“自包含的”,无需在 PC 上安装任何东西
答案1
一般来说,您在快捷方式中作为目标放置的任何内容也可以在命令行上运行,反之亦然。
您可以有一个运行的命令<path-to-perl>\perl.exe <full-path-to-pl-script>
。请注意,没有引用 cmd.exe。此命令可以直接在命令提示符下运行,也可以粘贴到批处理文件中,也可以作为快捷方式的目标。它甚至可以在 Windows 计划任务中使用!
如果您想要执行更多命令,例如在 perl 脚本后暂停,请使用如下命令:cmd /c "<path-to-perl>\perl.exe <full-path-to-pl-script> & pause"
或者类似这样的命令:cmd /k "<path-to-perl>\perl.exe <full-path-to-pl-script>"
。
但您不需要使用“cmd”或“pause”。您只需让 perl 脚本在最后一行执行即可。但您还想将输出打印到 STDERR 或将其包含在 pl 脚本的顶部$| = 1;
。如果您让 Perl 默认在 STDOUT 上进行输出缓冲,则在按下 ENTER 后您才会看到部分输出。
use strict; use warnings; $| = 1;
print "some info\n";
foreach my $infoline (@infolines) { print "$infoline\n"; }
print "hit ENTER to continue ";
<STDIN>;
回到你开始的例子,你说打开命令行,并将提示符设置为“D:/path to script_”,这实际上是一个问题。快捷方式应该直接启动 perl 脚本,对于 perl 脚本来说,起始目录是快捷方式中的“起始于”值。如果需要,请使用 chdir 从那里更改。我的建议是给予 perl 脚本完全控制权,包括要使用的目录,并忽略快捷方式中的起始目录。
答案2
您应该能够使用包含 perl 脚本的标准 .BAT 文件执行此操作。要保留 CMD 窗口,请将暂停命令放在 perl 脚本后面。
D:/perl 脚本的路径
暂停