我有一个草莓Perl程序,接受一个单一的文件作为命令行参数。 我怎么设置,以便我可以将所需的文件拖放到草莓Perl程序(或其周围的包装),程序运行该文件的名称作为参数?
在Windows下(使用XP进行测试),你可以创建一个.cmd文件,只需运行带有参数%1的Perl程序来传递文件名就好像由命令行执行一样。
perl c:\test.pl %1
然后,您可以简单地将文件拖放到.cmd文件上执行。
Eeek! 请不要在不需要时创建包装脚本/ 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注册表脚本为你做这个。
这是“包装器”的另一种替代方法,但需要对perl脚本进行一些修改:
@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
”只是帮助调试。
当我不太了解目标系统(可能无法编辑注册表)时,这是我的首选解决方案。