perl - 如何让 Perl 脚本识别 Win32 cmd 控制台中的参数?

标签 perl scripting winapi cmd

当我在 Windows 环境中调用我的 Perl 脚本而不调用时 perl首先,参数没有传递给我的脚本。

例如,

C:\> C:\my-perl-scripts\foo.pl bar

调用 foo.pl但不识别 bar作为参数(@ARGV 为空)。然而,
C:\> perl C:\my-perl-scripts\foo.pl bar

按预期工作。

这是配置问题吗?

理想情况下,我希望能够分发一些 perl 脚本,让用户添加 C:\my-perl-scripts\到路径然后就可以调用 foo.pl在运行 cmd 时从任何地方。

如果他们必须首先指定 perl,那么他们将始终必须提供完整的路径。

有什么想法或建议吗?

编辑:为了显示系统上的 assoc 和 ftype 是正确的,我执行了以下命令。
C:\>assoc .pl
.pl=Perl

C:\>ftype Perl
Perl="C:\Perl\bin\perl.exe" "%1" %*

C:\>more t.pl
print "'$_'\n" for @ARGV;

C:\>t a b

C:\>perl t.pl a b
'a'
'b'

C:\>t.pl a b

C:\>

我包括了 t 和 t.pl 的输出,以表明它不是 %PATHEXT% 问题。两者都没有像最初描述的那样输出任何内容,而调用 perl 首先给出了预期的响应。

我不确定下一步该往哪里看,但感谢到目前为止的建议。他们非常有帮助。

编辑 2:问题似乎出在我的 vista 商务盒上。在我的 xp pro 盒子上,它按预期工作。两者都有 ActivePerl 5.8.9。我还有另一个尚未尝试过的vista home box。如果我发现任何东西,我会回帖。

编辑 3:我找到了答案(贴在下面)。我通过运行注册表清理器,删除 perl,再次运行注册表清理器来找到它。在第二次清理时,只剩下一个无效条目 - 导致问题的条目(可能是上一次安装遗留的)。

最佳答案

我发现了问题所在。尽管 ftype 和 assoc 值是按照建议设置的,但我系统上的实际行为似乎由注册表项决定

HKEY_CLASSES_ROOT\Applications\perl.exe\shell\open\command

它应该有一个 (Default) "C:\Perl\bin\perl.exe" "%1" %* 的字符串值

当我找到这个条目时,它被设置为 "C:\Perl\bin\perl.exe" "%1" .更改它立即解决了问题。

为什么一开始就这样设定?我不知道。也许来自以前的安装?

无论如何,感谢您的建议,我希望这个答案也能帮助其他人。

关于perl - 如何让 Perl 脚本识别 Win32 cmd 控制台中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695188/

相关文章:

batch-file - 批处理 - 延迟扩展不适用于周围的 if 子句

c++将控制台文本颜色设置为RGB值

c++ - ImpersonateLoggedOnUser 失败的条件

Perl WWW::Mechanize::Firefox 复选框打勾

regex - 从正则表达式组中删除某些字符

php - 如何在 linux box 中使用 javascript、php、bash 发送 nic mac 地址信息?

c++ - BitBlt 使用 C++ 反转颜色

linux - Net::Bluetooth 不发现设备

mysql - 如何在 Mac OS Sierra 中使用 Perl/CGI 连接 MySQL?

mysql - 编写多个mysql脚本