5

如何通过 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

4 回答 4

9

我刚刚在我的 Vista 64 Ultimate 上尝试了 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 是正确的:它必须是“文件关联”问题;

在资源管理器上,右键单击您的 .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\"没有%*参数)
  • SO 记录的注册表添加是必要的
于 2009-01-14T20:10:32.060 回答
7

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

HKEY_CLASSES_ROOT\.pl 

包含默认字符串“Perl”

HKEY_CLASSES_ROOT\Perl\shell\open\command 

包含默认字符串:

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

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

于 2009-01-14T20:02:13.590 回答
2

Vista 的文件扩展管理器删除了向程序传递参数的能力。您必须像 devio 提到的那样手动编辑注册表(或使用其他程序来编辑文件扩展名)。

于 2009-01-14T20:09:08.647 回答
0

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

于 2011-11-17T10:34:47.110 回答