我希望我的 Perl 脚本的行为与任何其他可执行文件(*.exe 文件)一样。
- 当我双击
myscript.pl
时,我希望它执行而不是在文本编辑器中打开。 - 我想运行
myscript.pl
而不是perl myscript.pl
。 - 我真的很想运行
myscript
而不是myscript.pl
。 - 我想运行
程序| myscript
而不是program | perl myscript.pl
. - 我希望能够通过拖放来运行我的脚本。
您必须在 Windows 上进行许多更改才能实现所有 这些东西起作用了。用户通常会偶然发现一些不的东西 一个时间;让他们感到困惑,他们是否犯了错误,其中有一个错误 Perl,Windows 中有一个错误,或者他们想要的行为是不可能的。 这个问题旨在提供一个单一的引用点,以便 一切都在前面工作;理想情况下甚至在这些问题发生之前。
相关问题:
- How do I make Perl scripts recognize parameters in the Win32 cmd console?
- Running a perl script on windows without extension
- Perl execution from command line question
- How can I read piped input in Perl on Windows?
- Perl on Windows, file associations and I/O redirection
- How do I create drag-and-drop Strawberry Perl programs?
最佳答案
注意:以下操作需要管理权限。为了 使用命令提示符的步骤必须通过“运行方式”启动 Windows Vista/Windows 7 上的管理员”。
关联 *.pl 文件与 perl
在 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
- 草莓 Perl:
C:\Strawberry
将 .PL
添加到您的 PATHEXT 环境变量中。
这使得 Windows 在搜索您的文件时认为 *.pl 文件是可执行的
小路。它使您能够运行 myscript
而不是 myscript.pl
。
你可以为当前的cmd session 设置它
set PATHEXT=%PATHEXT%;.PL
永久设置(在 Windows Vista 或 Windows 7 下)
setx PATHEXT %PATHEXT%;.PL
在 Windows XP 下,您必须使用 GUI:
- 右键单击“我的电脑”,然后单击“属性”。
- 单击“高级”选项卡。
- 点击环境变量。
- 选择 PATHEXT,然后点击编辑。
- 将
;.PL
附加到当前值。
使 I/O 重定向工作
I/O 重定向(例如 program | myscript
)对启动的程序不起作用
通过文件关联。有一个注册表补丁可以解决这个问题。
- 启动注册表编辑器。
- 在注册表中找到并单击以下项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
- 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
- 值名称:
InheritConsoleHandles
- 数据类型:
REG_DWORD
- 基数:
十进制
- 数值数据:
1
- 值名称:
- 退出注册表编辑器。
警告:原则上,只有在 Windows XP 上才需要这样做。根据我的经验,它在 Windows 7 中也是必要的。在 Windows 10 中,这非常有害——程序执行但在 stdout/stderr 上不产生任何内容。注册表项需要设置为 0 而不是 1。
另见:
- STDIN/STDOUT Redirection May Not Work If Started from a File Association
- Perl Scripts on Windows 10 run from Explorer but not Command Prompt
如果修补注册表不是运行程序的选项 | perl -S myscript.pl
对于 PATH 中的脚本来说,这是一种不那么烦人的解决方法。
添加放置处理程序
为 Perl 添加拖放处理程序允许您通过拖放运行 Perl 脚本; 例如将文件拖到 Windows 资源管理器中的文件图标上并将其放下 那里。运行以下脚本以将必要的条目添加到注册表中:
use Win32::TieRegistry;
$Registry->Delimiter("/");
$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};
$perlKey-> {"shellex/"} = {
"DropHandler/" => {
"/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"
}};
关于windows - 如何使我的 Perl 脚本像 Windows 上的普通程序一样运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727480/