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 ファイルを右クリックし、「Open with」と尋ねます。「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 では大文字と小文字が区別されるということです。コマンド ライン パラメーターが渡されない理由を調べるのに 1 時間費やしてください。ARGV[ の代わりに argv[0] を使用しただけです0] ...

于 2011-11-17T10:34:47.110 に答える