我希望我的Perl脚本的行为与任何其他可执行文件(* .exe文件)一样。
myscript.pl
时,我希望它执行而不是在文本编辑器中打开。myscript.pl
而不是perl myscript.pl
。myscript
而不是myscript.pl
。program | myscript
而不是program | perl myscript.pl
。您必须在Windows上进行许多更改才能完成所有更改 这些东西都有用。用户通常偶然发现不工作的东西 一个时间;让他们感到困惑,他们是否犯了错误,有一个错误 Perl,Windows中存在一个错误,或者他们想要的行为是不可能的。 这个问题旨在为制作提供单一的参考点 一切都在前面;理想情况下,甚至在这些问题发生之前。
相关问题:
答案 0 :(得分:57)
注意:以下操作需要管理权限。对于 使用命令提示符的步骤必须通过“运行方式”启动 管理员“在Windows Vista / Windows 7上。
在shell提示符下运行以下命令:
assoc .pl=PerlScript
ftype PerlScript=C:\bin\perl.exe "%1" %*
将C:\Perl\bin\perl.exe
替换为Perl安装的路径。这个
使您能够运行myscript.pl
而不是perl myscript.pl
。
默认安装位置为:
C:\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:
;.PL
附加到当前值。 I / O重定向(例如program | myscript
)对于已启动的程序不起作用
通过文件关联。有一个注册表补丁来纠正这个问题。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
警告:原则上,这只应在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脚本:
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。