windows - Hvordan opretter jeg træk-og-slip-jordbær Perl-programmer?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et Strawberry Perl-program, der accepterer en enkeltfil som et kommandolinjeprincip. Hvordan kan jeg sætte tingene op, så jeg kan trække og slippe den ønskede fil på Strawberry Perl-programmet (eller en wrapper omkring den) og programmet kører med den pågældende fils navn som et argument? [13]

Bedste reference


Under Windows (testet med XP) kan du oprette en .cmd-fil og bare få den til at køre Perl-programmet med argumentet for\% 1 for at sende filnavnet over, som om det udføres af kommandolinje.


perl c:	est.pl \%1


Derefter kan du blot trække og slippe en fil på .cmd-filen, der skal udføres.

Andre referencer 1


Eeek! Vær venlig at lave et indpakningsskript/cmd, når du ikke behøver det.


Gå ind i din Registry eller din File Type dialogboks i Windows, og omdefinér Perl standard handling for at sige:


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


Dette vil medføre dobbeltklik på .PL for at starte perl.exe med navnet på den dobbeltklikede fil (\% 1). \% * Stuff (der overfører filnavn argumenter til Perl script) er vanskeligere.


Gå ind i registreringsdatabasen igen (virkelig, det er ikke så skræmmende som folk tror) og find/opret en 'shellex' nøgle under Perl-klassen, og lav derefter en undernøgle kaldet 'DropHandler' med en standard strengværdi af ' {86C86720-42A0-1069-A2E8-08002B30309D} '(i hvert fald det er min DropHandler i den amerikanske version af Windows XP).


Dette tillader .pl filer (faktisk alt, der er forbundet med Perl klassen) at have en drop handler, der fortæller Explorer hvad man skal gøre, når du slipper fil (er) på .pl script. I dette tilfælde betyder det blot 'Kør Perl-scriptet med den faldne fil (er) som argumenter'.


Hmmm, jeg tror ikke, jeg har forklaret det rigtig godt, men det er sådan, jeg har oprettet Perl (kører fra et netværksdrev) til en stor ingeniørorganisation. Google for Perl og DropHandler, og du skal kunne få .reg-registreringsskriptet til at gøre dette for dig.

Andre referencer 2


Her er et andet alternativ til en 'wrapper', men det kræver en lille ændring af perl scriptet:



  1. Omdøb dit script.pl script til script.cmd.

  2. Tilføj følgende til toppen af ​​filen:




  @SETLOCAL ENABLEEXTENSIONS

  @c:path operl.exe -x "\%~f0" \%*

  @exit /b \%ERRORLEVEL\%

  #!perl

  #line 6

  # ...perl script continues here...



Scriptet kører som enhver anden batchfil. De første tre linjer påberåber grundlæggende Perl på CMD-filen selv (\%~f0, som kun virker, hvis CMD-udvidelser er tændt). Parameteren -x til perl.exe fortæller Perl at springe alt over til linjen #!perl. '#line 6' bare hjælpemidler i debugging.


Dette er min foretrukne løsning, når jeg ikke ved meget om målsystemet (og muligvis ikke kan redigere registreringsdatabasen).