13

我有一个Strawberry Perl程序,它接受单个文件作为命令行参数。如何进行设置,以便可以将所需的文件拖放到 Strawberry Perl 程序(或围绕它的包装器)上,并且程序以该文件的名称作为参数运行?

4

3 回答 3

21

在 Windows 下(用 XP 测试),您可以创建一个 .cmd 文件并简单地让它运行带有 %1 参数的 Perl 程序来传递文件名,就像通过命令行执行一样。

perl c:\test.pl %1

然后,您只需将文件拖放到 .cmd 文件上即可执行。

于 2009-04-01T14:57:36.370 回答
19

哎呀!请不要在不需要时创建包装脚本/cmd。

进入您的注册表或 Windows 中的文件类型对话框,然后重新定义 Perl 默认操作:

"C:\path-to-perl-folders\perl.exe" "%1" %*

这将导致双击 .PL 以使用双击文件 (%1) 的名称启动 perl.exe。%* 东西(将任何文件名参数传递给 Perl 脚本)比较棘手。

再次进入注册表(真的,没有人们想象的那么可怕)并在 Perl 类下找到/创建一个“shellex”键,然后创建一个名为“DropHandler”的子键,默认字符串值为“{86C86720 -42A0-1069-A2E8-08002B30309D}”(至少,这是我在美国版 Windows XP 中的 DropHandler)。

这允许 .pl 文件(实际上是与 Perl 类相关的任何东西)有一个放置处理程序,它告诉资源管理器当您在 .pl 脚本上放置文件时要做什么。在这种情况下,它只是意味着“以删除的文件作为参数运行 Perl 脚本”。

嗯,我不认为我解释得很好,但这就是我为大型工程组织设置 Perl(运行网络驱动器)的方式。谷歌 Perl 和 DropHandler,你应该可以得到 .reg Registry 脚本来为你做这件事。

于 2009-04-01T16:38:28.873 回答
1

这是“包装器”的另一种替代方案,但需要对 perl 脚本稍作修改:

  1. 将您的 script.pl 脚本重命名为 script.cmd。
  2. 将以下内容添加到文件顶部:

@SETLOCAL ENABLEEXTENSIONS
@c:\path\to\perl.exe -x "%~f0" %*
@exit /b %ERRORLEVEL%
#!perl
#line 6
# ...perl script continues here...

该脚本像任何其他批处理文件一样运行。前三行基本上是在 CMD 文件本身上调用 Perl(%~f0只有在打开 CMD 扩展时才有效)。-xperl.exe的参数告诉 Perl 跳过所有内容,直到该#!perl行。" #line 6" 只是帮助调试。

当我对目标系统不太了解(并且可能无法编辑注册表)时,这是我的首选解决方案。

于 2009-06-29T01:33:35.903 回答