2009-04-01 10 views
12

Tengo un programa Strawberry Perl que acepta un archivo único como un argumento de línea de comandos. ¿Cómo puedo configurar las cosas de manera que pueda arrastrar y soltar el archivo deseado en el programa Strawberry Perl (o un contenedor alrededor) y el programa se ejecuta con el nombre de ese archivo como argumento?¿Cómo creo los programas de arrastrar y soltar Strawberry Perl?

+0

Creo que depende mucho más de su sistema operativo que su lenguaje de programación. ¿Qué sistema operativo y versión estás usando? –

+2

@Jack M. - Strawberry Perl es el nuevo perl oficial para Windows. El sistema operativo está, por lo tanto, implícito en mi pregunta para (supongo) que alguien sepa la respuesta. – skiphoppy

+0

@Jack M: ooohhh, brilla! – belgariontheking

Respuesta

20

En Windows (probado con XP), puede crear un archivo .cmd y simplemente hacer que ejecute el programa Perl con el argumento de% 1 para pasar el nombre de archivo, como si se ejecutara por línea de comandos.

perl c:\test.pl %1 

Luego puede simplemente arrastrar y soltar un archivo en el archivo .cmd para ejecutar.

+0

También puede colocar este archivo en su carpeta 'enviar a' y luego puede hacer clic derecho -> enviar a' en el shell. –

+0

¡Frakkle, eres el hombre! Pregunta de seguimiento: ¿cómo hago que la ventana de la consola no se cierre inmediatamente después de mostrar su salida? :) – skiphoppy

+0

Robert, gracias; Tengo un compañero de trabajo que quería que funcione de esa manera. – skiphoppy

18

Eeek! No cree un script/cmd de contenedor cuando no lo necesite.

entrar en su registro o el cuadro de diálogo Tipo de archivo en Windows, y redefinir la acción predeterminada Perl decir:

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

Esto hará doble clic en el .PL para lanzar perl.exe con el nombre del archivo doble clic (% 1). El elemento% * (pasar cualquier argumento de nombre de archivo al script de Perl) es más complicado.

Ingrese nuevamente en el Registro (realmente, no es tan aterrador como la gente piensa) y encuentre/cree una clave "shellex" debajo de la clase Perl, y luego cree una subclave llamada "DropHandler" con un valor de cadena predeterminado de "{86C86720-42A0-1069-A2E8-08002B30309D}" (al menos, ese es mi DropHandler en la versión estadounidense de Windows XP).

Esto permite que los archivos .pl (en realidad, cualquier cosa asociada con la clase Perl) tengan un controlador de acceso directo que le dice a Explorer qué hacer cuando suelta archivos en el script .pl. En este caso, solo significa "ejecutar el script de Perl con el/los archivo (s) caído (s) como argumentos".

Hmmm, no creo que lo haya explicado muy bien, pero así es como configuré Perl (ejecutándose en una unidad de red) para una gran organización de ingeniería. Google para Perl y DropHandler, y usted debería poder obtener el script del Registro .reg para hacer esto por usted.

+1

¡Buena llamada! Yo no estaba al tanto de esto. Por supuesto, la ventaja del método de script de envoltura es que es muy fácil de implementar en otras máquinas. Hay ventajas y desventajas para ambos métodos, supongo, pero esta es una solución genial. – Frakkle

1

Aquí es otra alternativa a una "envoltura", pero requiere una ligera modificación al script Perl:

  1. cambiar el nombre del script de script.pl a script.cmd.
  2. Añadir lo siguiente a la parte superior del archivo:

@SETLOCAL ENABLEEXTENSIONS
@c:\path\to\perl.exe -x "%~f0" %*
@exit /b %ERRORLEVEL%
#!perl
#line 6
# ...perl script continues here...

El script se ejecuta como cualquier otro archivo por lotes. Las tres primeras líneas básicamente invocan a Perl en el archivo CMD mismo (%~f0, que solo funciona si las extensiones CMD están activadas). El parámetro -x para perl.exe le dice a Perl que saltee todo hasta la línea #!perl. "#line 6" solo ayuda a depurar.

Esta es mi solución preferida cuando no sé mucho sobre el sistema de destino (y es posible que no pueda editar el registro).