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

StackOverflow https://stackoverflow.com/questions/444388

Pregunta

¿Cómo se pueden 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 de Perl que transferí fallaron debido a que no se pasaron los argumentos de la línea de comandos. 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

Ejecutar " foo.pl 1 2 3 " indeseablemente cedido:

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

Ejecutando " perl foo.pl 1 2 3 " esperado:

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

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

También probé ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi en vano.

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

¿Fue útil?

Solución

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 tiene razón : debe ser una " asociación de archivos " problema;

En un explorador, haga clic con el botón derecho en el archivo .pl y pregunte "Abrir con": use el intérprete de línea de comandos 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 las funciones". parece mal ...


Sí 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 seleccionó la asociación durante la configuración de ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi
  • o su cuenta no tiene privilegios suficientes para escribir nada en el registro.

Nota:

  • parece que el administrador de extensiones regular en Vista no pasa argumentos (lo que significa \ " C: \\ Perl64 \\ bin \\ perl.exe \ " \ "% 1 \ " sin el argumento % * )
  • es necesario agregar el registro según lo documentado por el SO

Otros consejos

No sé acerca de Vista y 64 bits, pero en "clásico" versiones de Windows puede editar el registro:

HKEY_CLASSES_ROOT\.pl 

contiene la cadena predeterminada " Perl "

HKEY_CLASSES_ROOT\Perl\shell\open\command 

contiene la cadena predeterminada:

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

donde% * es una macro para todos los parámetros que siguen al primero. Probablemente falta% *.

El administrador de extensiones de archivos de Vista eliminó la capacidad de pasar argumentos a los programas. Tiene que editar manualmente el registro como lo menciona Devio (o usar otro programa para editar extensiones de archivo).

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top