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

时间:2011-01-18 18:11:02

标签: windows perl

我希望我的Perl脚本的行为与任何其他可执行文件(* .exe文件)一样。

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

您必须在Windows上进行许多更改才能完成所有更改 这些东西都有用。用户通常偶然发现工作的东西 一个时间;让他们感到困惑,他们是否犯了错误,有一个错误 Perl,Windows中存在一个错误,或者他们想要的行为是不可能的。 这个问题旨在为制作提供单一的参考点 一切都在前面;理想情况下,甚至在这些问题发生之前。

相关问题:

5 个答案:

答案 0 :(得分:57)

注意:以下操作需要管理权限。对于 使用命令提示符的步骤必须通过“运行方式”启动 管理员“在Windows Vista / Windows 7上。

使用perl

关联* .pl文件

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

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

C:\Perl\bin\perl.exe替换为Perl安装的路径。这个 使您能够运行myscript.pl而不是perl myscript.pl

默认安装位置为:

  • ActivePerl:C:\Perl
  • Strawberry Perl:C:\Strawberry

.PL添加到PATHEXT环境变量。

这使Windows在搜索时可以认为* .pl文件是可执行的 路径。它使您可以运行myscript而不是myscript.pl

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

set PATHEXT=%PATHEXT%;.PL

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

setx PATHEXT %PATHEXT%;.PL

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

  1. 右键单击“我的电脑”,然后单击“属性”。
  2. 单击“高级”选项卡。
  3. 单击环境变量。
  4. 选择PATHEXT,然后单击编辑。
  5. ;.PL附加到当前值。
  6. 使I / O重定向工作

    I / O重定向(例如program | myscript)对于已启动的程序不起作用 通过文件关联。有一个注册表补丁来纠正这个问题。

    1. 启动注册表编辑器。
    2. 找到并单击注册表中的以下项:   HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    3. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
      • 值名称:InheritConsoleHandles
      • 数据类型:REG_DWORD
      • Radix:Decimal
      • 价值数据:1
    4. 退出注册表编辑器。
    5. 警告:原则上,这只应在Windows XP上使用。根据我的经验,它在Windows 7中也是必要的。在Windows 10中,这是主动有害的 - 程序执行但在stdout / stderr上什么都不产生。注册表项需要设置为0而不是1。

      另见:

      如果修补注册表不是运行program | perl -S myscript.pl的选项 对于PATH中的脚本来说,这是一种不那么烦人的解决方法。

      添加放置处理程序

      为Perl添加drop处理程序允许您通过drag& amp;运行Perl脚本。下降; 例如将文件拖放到Windows资源管理器中的文件图标上并将其删除 那里。运行以下脚本以将必要的条目添加到注册表:

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

答案 1 :(得分:7)

一旦准备好由用户运行,就可以使用pl2bat将perl脚本转换为批处理文件。

这个技巧适用于perl -x开关,根据perldoc perlrun,它会让Perl搜索第一行,看起来像#!.*perl

答案 2 :(得分:1)

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

ActivePerl. .pl files no longer execute but open in Notepad instead找到Jack Wu的评论后,我可以双击运行perl脚本:

  • 选择并右键单击.pl文件
  • 使用“打开方式”子菜单“选择其他应用”
  • 选择“始终使用此应用程序打开.pl文件”(立即执行此操作 - 选择程序后您将无法获得机会)
  • 滚动到“其他选项”的底部以查找“更多应用”,然后选择“在此PC上查找其他应用”
  • 导航到C:/ path / to / perl / bin /并选择Perl5.16.3.exe(或等效项,具体取决于您安装的Perl版本:但不是 {{1 }})

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

答案 3 :(得分:0)

我尝试了assoc和ftype方法,但它们对我不起作用。

有效的方法是编辑此注册表项:

Computer\HKEY_CURRENT_USER\Software\Classes\Applications\perl.exe\shell\open\command

它被设置为: "C:\Perl64\bin\perl.exe" "%1"

何时应该: "C:\Perl64\bin\perl.exe" "%1" %*

它与ftype的内容相同,但是出于不可思议的Windows的原因,我也必须在其中设置它。

答案 4 :(得分:0)

我和其他人一样,设置了'assoc'和'ftype',但是还通过GUI设置了记事本文本编辑器,当我尝试通过命令行执行脚本时,Windows调用了记事本来编辑脚本运行我的脚本。

使用GUI代替将.pl文件关联指向运行脚本的可执行文件并没有多大改进,因为它会在我的脚本上调用该可执行文件,但不会传递任何命令行参数(即使在我调用时)我的脚本从命令行)。

我终于找到了救赎here,建议我删除一些注册表项。

关键语录: “问题是,如果您已经通过“打开方式”对话框将程序与扩展名相关联,那么您将在两者之间创建一个应用程序关联而不是文件扩展名关联。并且应用程序关联优先。”

就我而言,请按照说明使用RegEdit进行删除

HKEY_CLASSES_ROOT \应用程序\ perl.exe

其中perl.exe是我的Perl可执行文件的名称,然后删除:

HKEY_CLASSES_ROOT \ .pl

似乎可以解决我的问题,然后(在如其他答案所示重新执行“ assoc”和“ ftype”命令之后)之后,我可以从cmd.exe执行脚本,并通过对其命令行的访问来运行它们参数。

其他一些相关信息here