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

有帮助吗?

解决方案

在Windows(用XP测试)下,您可以创建一个.cmd文件,然后将其运行的PERL程序以%1的参数来传递文件名,就好像由Commandline执行。

perl c:\test.pl %1

然后,您可以简单地将文件拖放到.cmd文件中以执行。

其他提示

eeek!当您不需要时,请不要创建包装脚本/CMD。

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

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

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

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

这允许.pl文件(实际上,与Perl类关联的任何内容)具有一个Drop Handler,该文件处理程序告诉Explorer在.pl脚本上删除文件时该怎么办。在这种情况下,它只是指“以删除文件作为参数运行perl脚本”。

嗯,我认为我的解释不太好,但这就是我为大型工程组织设置Perl(从网络驱动器上运行)的方式。 Google for Perl和Drophandler,您应该能够获得.reg注册表脚本为您完成。

这是“包装器”的另一种选择,但需要对Perl脚本进行一些修改:

  1. 将您的脚本.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扩展时才起作用)。这 -x 介绍者到perl.exe告诉Perl跳过一切直到 #!perl 线。 “#line 6“只是有助于调试。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top