2009-01-14 88 views
5

如何通过文件关联在Vista 64中传递命令行参数?如何通过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无济于事。

任何帮助,将不胜感激。这让我非常沮丧。

回答

9

我刚刚尝试ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi在我的Vista 64旗舰版上,它的工作。

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
7

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

HKEY_CLASSES_ROOT\.pl 

包含默认字符串 “的Perl”

HKEY_CLASSES_ROOT\Perl\shell\open\command 

包含默认字符串:

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

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

+0

我只看到下面 HKEY_CLASSES_ROOT \特等\ Perl的\(默认值)=(值未设置) HKEY_CLASSES_ROOT \特等\ Perl的\的ShellNew \(默认值)=(值未设置) 我发现%*我的语法win32.perl.org侦查。 Vista使用“assoc”和“ftype”功能,我已经试过修改无效:( – vlee 2009-01-14 20:14:29

+0

实际的命令是在HKEY_CLASSES_ROOT \ Perl \ shell \ Open \ command中,看到我的回答如下 – VonC 2009-01-14 20:24:36

+0

由于命令行找到了perl解释器当您启动一个.pl文件时,关联必须是* somewhere *。在注册表中搜索“perl.exe”,并查看您是否可以应用此信息 – devio 2009-01-14 20:35:18

2

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

0

对于Perl初学者来说,知道的另一个有趣之处是ARGV区分大小写 ...只花一个小时试图找出为什么我的命令行参数没有通过,而只是我用argv [0]代替了ARGV [0] ...

相关问题