如何通过Vista 64中的文件关联传递命令行参数?

时间:2009-01-14 19:43:57

标签: perl windows-vista 64-bit argument-passing

如何通过Vista 64中的文件关联传递命令行参数?

我最近构建了一台运行Vista Ultimate 64位的PC。我注意到由于没有传递命令行参数,我传输的几个Perl脚本失败了。作为一个简单的测试,我写了以下(foo.pl):

#!/usr/bin/perl -w
use strict;
my $num_args = $#ARGV + 1;
print "${num_args} arguments read\n";
print "$^X\n" # to see what was being used

运行“foo.pl 1 2 3”不合意地产生了:

0 arguments read
C:\strawberry\perl\bin\perl.exe

运行“perl foo.pl 1 2 3”预计会产生:

3 arguments read
C:\strawberry\perl\bin\perl.exe

在我的旧Windows XP PC上,两个调用都返回了3个参数。我在这里记录了更多我的侦探(win32.perl.org wiki talk),但我还没有找到有效的解决方案。

我也尝试过ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi无济于事。

任何帮助将不胜感激。这让我很沮丧。

4 个答案:

答案 0 :(得分:9)

我刚在Vista 64旗舰版上尝试过ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi,但它确实有效。

F:\prog\perl>foo.pl 1 2 3
3 arguments read
C:\Perl64\bin\perl.exe

这意味着devio is right:它必须是“文件关联”问题;

在资源管理器上,右键单击.pl文件并询问“打开方式”:使用“Perl命令行解释程序”它将起作用(并选择“始终使用此程序打开此类文件”)

对我来说,“Vista的文件扩展管理器删除了将参数传递给函数的能力”似乎错了......


我确实看到了:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Perl\shell\Open\command]
@="\"C:\\Perl64\\bin\\perl.exe\" \"%1\" %*"

这意味着如果您的安装没有在注册表中添加这种值,那是因为:

  • 您在ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi的设置过程中没有选择关联
  • 或您的帐户没有足够的权限在注册表中写任何内容。

注意:

  • 似乎Vista上的常规扩展管理器没有传递参数(意味着\"C:\\Perl64\\bin\\perl.exe\" \"%1\"没有%*参数)
  • 必须添加注册表as documented by the SO

答案 1 :(得分:7)

不了解Vista和64位,但在“经典”版本的Windows下,您可以编辑注册表:

HKEY_CLASSES_ROOT\.pl 

包含默认字符串“Perl”

HKEY_CLASSES_ROOT\Perl\shell\open\command 

包含默认字符串:

"C:\path-to\Perl\bin\perl.exe" "%1" %*

其中%*是第一个之后所有参数的宏。可能缺少%*。

答案 2 :(得分:2)

Vista的文件扩展名管理器删除了将参数传递给程序的功能。您必须手动编辑注册表,如devio提及(或使用其他程序编辑文件扩展名)。

答案 3 :(得分:0)

对于Perl初学者来说,有趣的是 ARGV区分大小写 ...只花一个小时试图找出为什么我的命令行参数没有通过,而且只是那个我使用argv [0]而不是ARGV [0] ......