Как передать аргументы командной строки через сопоставление файлов в Vista 64? - PullRequest
5 голосов
/ 14 января 2009

Как можно передать аргументы командной строки через сопоставление файлов в Vista 64?

Я недавно создал ПК с 64-битной Vista Ultimate. Я заметил, что некоторые из перенесенных мной сценариев 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 оба вызова вернули 3 аргумента. Я задокументировал здесь больше моих споров ( win32.perl.org wiki talk ), но мне еще предстоит найти решение, которое работает.

Я также пробовал ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi безрезультатно.

Любая помощь будет принята с благодарностью. Это сводит меня с ума.

Ответы [ 4 ]

9 голосов
/ 14 января 2009

Я только что попробовал ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi на моей Vista 64 Ultimate, и это сработало.

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
7 голосов
/ 14 января 2009

Не знаю про Vista и 64bit, но в «классических» версиях Windows вы можете редактировать реестр:

HKEY_CLASSES_ROOT\.pl 

содержит строку по умолчанию "Perl"

HKEY_CLASSES_ROOT\Perl\shell\open\command 

содержит строку по умолчанию:

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

где% * - макрос для всех параметров, следующих за первым. Вероятно,% * отсутствует.

2 голосов
/ 14 января 2009

Диспетчер расширений файлов в Vista убрал возможность передавать аргументы программам. Вы должны вручную отредактировать реестр, как упоминает devio (или использовать другую программу для редактирования расширений файлов).

0 голосов
/ 17 ноября 2011

Также интересно знать для начинающего Perl, что ARGV чувствителен к регистру ... просто потратьте час, пытаясь выяснить, почему мои параметры командной строки не передаются, и я просто использовал argv [0] вместо ARGV [0] ...

...