2009-01-14 12 views
5

¿Cómo se pueden pasar los argumentos de la línea de comando a través de la asociación de archivos en Vista 64?¿Cómo puedo pasar los argumentos de la línea de comandos a través de la asociación de archivos en Vista 64?

Recientemente construí una PC con Vista Ultimate de 64 bits. Noté que varios de los scripts Perl que transferí fallaron debido a que los argumentos de la línea de comandos no se pasaron. Como una prueba simple, escribí lo siguiente (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 

Running "foo.pl 1 2 3" no deseable dado:

0 arguments read 
C:\strawberry\perl\bin\perl.exe 

Running "foo.pl Perl 1 2 3 "esperado rendimiento:

3 arguments read 
C:\strawberry\perl\bin\perl.exe 

En mi PC con Windows XP anterior, ambas invocaciones devolvieron 3 argumentos. Documenté más de mi investigación aquí (win32.perl.org wiki talk), pero aún no he encontrado una solución que funcione.

También he intentado ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi inútilmente.

Cualquier ayuda sería apreciada. Esto me está volviendo loco.

Respuesta

9

Acabo de probar ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi en mi Vista 64 Ultimate y funcionó.

F:\prog\perl>foo.pl 1 2 3 
3 arguments read 
C:\Perl64\bin\perl.exe 

Eso significa devio is right: tiene que ser un problema "asociación de archivos";

En un explorador, haga clic derecho en su archivo .pl y pregunte "Abrir con": use el "intérprete de línea de comandos de Perl" y funcionará (y seleccione "usar siempre este programa para abrir este tipo de archivo")

Para mí, "el administrador de extensiones de archivos de Vista eliminó la capacidad de pasar argumentos a funciones" parece incorrecto ...


Veo:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Perl\shell\Open\command] 
@="\"C:\\Perl64\\bin\\perl.exe\" \"%1\" %*" 

Es decir, si su instalación no puso ese tipo de valor en su registro, es porque:

  • no ha seleccionado la asociación durante la configuración de ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi
  • o su cuenta no tiene suficiente privilegio para escribir algo en el registro.

Nota:

  • parece que el gestor de extensiones regulares en Vista no pasa argumento (que significa \"C:\\Perl64\\bin\\perl.exe\" \"%1\" sin el argumento %*)
  • es necesaria la adición de registro as documented by the SO
+0

Desinstalé y volví a instalar asegurándome de que la asociación estaba seleccionada (valor predeterminado) y estoy un administrador. Sin embargo, todo funcionó como esperaba una vez que lo importé al copiar y pegar el bloque de código como pl.reg y ejecutarlo. Gracias (ahora para ver si esto funciona para Perl de fresa) – vlee

+0

El administrador de extensiones es un programa específico que aparece ... Olvidé su nombre exacto, pero solo le permite seleccionar un programa, en lugar de darle la opción de modificar la línea de comando que llama al programa como el editor de extensiones de WinXP. – Powerlord

+0

@R. Bemrose: ahora entiendo tu respuesta mejor ahora. Trataré de verificar eso mañana. – VonC

7

no sabe acerca de Vista y 64bits, pero en versiones "clásicas" de Windows, puede modificar el registro:

HKEY_CLASSES_ROOT\.pl 

contiene cadena por defecto "Perl"

HKEY_CLASSES_ROOT\Perl\shell\open\command 

contiene el valor por defecto cadena:

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

donde% * es una macro para todos los parámetros después de la primera. Probablemente falta el% *.

+0

Solo veo el siguiente HKEY_CLASSES_ROOT \ .pl \ Perl \ (default) = (value not set) HKEY_CLASSES_ROOT \ .pl \ Perl \ ShellNew \ (default) = (value not set) Descubrí% * la sintaxis en mi win32.perl.org detective. Vista usa las funciones "assoc" y "ftype" que ya intenté modificar en vano :( – vlee

+0

El comando real está en HKEY_CLASSES_ROOT \ Perl \ shell \ Open \ command, mira mi respuesta debajo de – VonC

+0

Desde la línea de comandos encuentra el intérprete de perl cuando inicia un archivo .pl, la asociación tiene que ser * somewhere *. Busque en el registro de "perl.exe" y vea si puede aplicar esta información – devio

2

El administrador de extensiones de archivos de Vista eliminó la capacidad de pasar argumentos a los programas. Tienes que editar manualmente el registro como las menciones devio (o usar otro programa para editar las extensiones de archivo).

0

También es interesante saber para un principiante de Perl que es ARGV distingue entre mayúsculas y minúsculas ... solo dedico una hora tratando de descubrir por qué mis parámetros de línea de comandos no se pasan, y fue solo que utilicé argv [0] en lugar de ARGV [0] ...

+1

Todos los nombres de variables de Perl distinguen entre mayúsculas y minúsculas. Seguramente ese es el caso (!) En la mayoría de los lenguajes de programación. –

+0

Supongo que estaba acostumbrado a tener argv y argc deletreado con letras pequeñas (ver java), así que no presté atención a la ortografía en los ejemplos ... – TheEye

Cuestiones relacionadas