如何让我的Perl脚本像Windows上的普通程序一样行事?

我希望我的Perl脚本像其他可执行文件(* .exe文件)一样运行。

  • 当我双击myscript.pl我希望它执行,而不是在文本编辑器中打开。
  • 我想运行myscript.pl而不是perl myscript.pl
  • 我真的想运行myscript而不是myscript.pl
  • 我想运行program | myscript program | myscript而不是program | perl myscript.pl program | perl myscript.pl
  • 我想能够通过拖放运行我的脚本。

你必须在Windows上进行一些改变才能使所有这些工作都能正常工作。 用户通常偶然发现不能一次一个工作的事情; 让他们感到困惑,他们是否犯了一个错误,Perl中存在一个错误,Windows中有一个错误,或者他们想要的行为是不可能的。 这个问题的目的是提供一个单一的参考点,使一切工作的前台; 最好在这些问题发生之前。

相关问题:

  • 如何让Perl脚本识别Win32 cmd控制台中的参数?
  • 在没有扩展名的窗口上运行perl脚本
  • Perl从命令行问题执行
  • 我如何在Windows上读取pipe道input?
  • Windows上的Perl,文件关联和I / Oredirect
  • 如何创build拖放草莓Perl程序?

注意:下面的操作需要pipe理权限。 有关使用命令提示符的步骤,必须通过Windows Vista / Windows 7上的“以pipe理员身份运行”启动。

将* .pl文件与perl关联

在shell提示下运行以下命令:

 assoc .pl=PerlScript ftype PerlScript=C:\bin\perl.exe "%1" %* 

C:\Perl\bin\perl.exereplace为您的Perl安装path。 这使您可以运行myscript.pl而不是perl myscript.pl

默认的安装位置是:

  • ActivePerl: C:\Perl
  • 草莓Perl: C:\Strawberry

.PL添加到PATHEXT环境variables中。

这使得Windows在searchPATH时认为* .pl文件是可执行的。 它使您能够运行myscript而不是myscript.pl

您可以将其设置为当前的cmd会话

 set PATHEXT=%PATHEXT%;.PL 

要永久设置(在Windows Vista或Windows 7下)

 setx PATHEXT %PATHEXT%;.PL 

在Windows XP下,您必须使用GUI:

  1. 用鼠标右键单击我的电脑,然后单击属性。
  2. 点击高级选项卡。
  3. 点击环境variables。
  4. selectPATHEXT,然后单击编辑。
  5. ;.PL添加到当前值。

使I / Oredirect工作(仅限于WinXP)

I / Oredirect(例如, program | myscript )不适用于通过文件关联启动的程序。 有一个registry补丁来纠正这个问题。

  1. 启动registry编辑器
  2. find并单击以下registry项中的项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. 在编辑菜单上单击添加值,然后添加以下registry值:
    • 值名称: InheritConsoleHandles
    • 数据types: REG_DWORD
    • 基数: Decimal
    • 价值数据: 1
  4. 退出registry编辑器。

另请参阅STDIN / STDOUTredirect可能不起作用(如果从文件关联启动) 。

如果修补registry不是运行program | perl -S myscript.pl的选项 program | perl -S myscript.pl对PATH中的脚本不太恼人。

添加拖放处理程序

为Perl添加一个放置处理程序允许您通过拖放来运行Perl脚本; 例如将文件拖到Windows资源pipe理器中的文件图标上,然后将其放在那里。 运行以下脚本以将必要的条目添加到registry中:

 use Win32::TieRegistry; $Registry->Delimiter("/"); $perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"}; $perlKey-> {"shellex/"} = { "DropHandler/" => { "/" => "{86C86720-42A0-1069-A2E8-08002B30309D}" }}; 

一旦他们准备好由用户运行,使用pl2bat将你的perl脚本转换成batch file。

这个技巧通过perl -x开关工作,根据perldoc perlrunperldoc perlrun让Perlsearch第一行,就像#!.*perl

按照接受的答案中的说明,双击仍导致在Windows 10中使用记事本打开.pl文件 – 即使当perl.exe被设置为默认文件处理程序。

在ActivePerlfindJack Wu的评论后。 .pl文件不再执行,而是在记事本中打开,而我可以双击运行perl脚本,如下所示:

  • select并右键单击.pl文件
  • 使用“打开方式”子菜单“select另一个应用程序”
  • select“总是使用这个应用程序来打开.pl文件”(现在就这样做 – select一个程序后,你不会得到机会)
  • 滚动到“其他选项”的底部以find“更多应用程序”,然后select“在此PC上查找另一个应用程序”
  • 导航到C:/ path / to / perl / bin /,然后selectPerl5.16.3.exe (或等价的,取决于您安装的Perl版本:但不是 Perl.exe

然后,Perl图标将出现在.pl文件旁边,双击将导致它们每次都按照需要在Perl中打开。