¿Cómo puedo pasar argumentos de línea de comandos a través de la asociación de archivos en Vista 64?
-
22-07-2019 - |
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.
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] ...