如何创建拖放草莓Perl程序?

时间:2009-04-01 14:44:10

标签: windows perl drag-and-drop strawberry-perl

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

3 个答案:

答案 0 :(得分:20)

在Windows下(使用XP测试),您可以创建一个.cmd文件,只需让它运行Perl程序,参数为%1即可传递文件名,就好像命令行执行一样。

perl c:\test.pl %1

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

答案 1 :(得分:18)

Eeek!如果不需要,请不要创建包装器脚本/ cmd。

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

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

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

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

这允许.pl文件(实际上,与Perl类相关联的任何内容)具有一个drop处理程序,告诉Explorer在.pl脚本上删除文件时要执行的操作。在这种情况下,它只是意味着“以删除的文件作为参数运行Perl脚本”。

嗯,我不认为我解释得那么好,但这就是我为大型工程组织设置Perl(运行网络驱动器)的方式。 Google for Perl和DropHandler,您应该能够获得.reg注册表脚本来为您执行此操作。

答案 2 :(得分:1)

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

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

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

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

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