2009-01-14 29 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] ...

相關問題