Domanda

Ho programma un Strawberry Perl che accetta un singolo file come un argomento della riga di comando. Come è possibile impostare le cose in modo tale che posso trascinare e rilasciare il file desiderato sul programma di Strawberry Perl (o un wrapper attorno ad esso) e il programma viene eseguito con il nome del file come argomento?

È stato utile?

Soluzione

In Windows (testato con XP), è possibile creare un file .cmd e semplicemente fare eseguire il programma Perl con l'argomento di% 1 per passare il nome del file sopra, come se eseguito da riga di comando.

perl c:\test.pl %1

Poi si può semplicemente trascinare e rilasciare un file sul file .cmd da eseguire.

Altri suggerimenti

Eeek! Si prega di non creare un wrapper script / cmd quando non è necessario.

Vai al tuo Registro di sistema o la vostra finestra di dialogo Tipo di file in Windows, e ridefinire l'azione predefinita Perl a dire:

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

Ciò causerà un doppio clic sul .PL per lanciare perl.exe con il nome del file doppio clic (% 1). La roba% * (passando tutti gli argomenti nomi di file allo script Perl) è più complicato.

Vai nel Registro di sistema di nuovo (in realtà, non è così spaventoso come la gente pensa) e trovare / creare un "ShellEx" chiave sotto la classe Perl, e quindi creare una sotto-chiave denominata "DropHandler" con un valore stringa di default di "{86C86720-42A0-1069-A2E8-08002B30309D}" (almeno, questa è la mia DropHandler nella versione americana di Windows XP).

In questo modo i file .pl (in realtà, tutto ciò associato alla classe di Perl) per avere un gestore di goccia che racconta Explorer cosa fare quando si rilascia il file (s) sulla sceneggiatura .pl. In questo caso, significa solo "eseguire lo script Perl con il file rilasciato (s) come argomenti".

Hmmm, non credo che ho spiegato molto bene, ma è così che ho creato Perl (scappare un'unità di rete) per una grande organizzazione di ingegneria. Google per Perl e DropHandler, e si dovrebbe essere in grado di ottenere lo script del Registro reg di fare questo per voi.

Ecco un'altra alternativa ad un "wrapper", ma richiede una leggera modifica allo script perl:

  1. Rinomina lo script script.pl a script.cmd.
  2. Aggiungi il seguente alla parte superiore del file:
  

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

Lo script viene eseguito come qualsiasi altro file batch. Le prime tre righe invoca sostanzialmente Perl sul file CMD stesso (%~f0, che funziona solo se le estensioni CMD sono accesi). Il paremeter -x a perl.exe dice a Perl di saltare tutto finché la linea #!perl. "#line 6" solo aiuta nel debug.

Questa è la mia soluzione preferita quando non so molto circa il sistema di destinazione (e non essere in grado di modificare il Registro di sistema).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top