У меня есть программа Strawberry Perl, которая принимает один файл в качестве аргумента командной строки. Как я могу настроить все так, чтобы я мог перетащить нужный файл в программу Strawberry Perl (или оболочку вокруг нее), и программа запускается с именем этого файла в качестве аргумента?
Как создавать программы Strawberry Perl с перетаскиванием?
Ответы (3)
В Windows (проверено с XP) вы можете создать файл .cmd и просто запустить программу Perl с аргументом %1 для передачи имени файла, как если бы он выполнялся из командной строки.
perl c:\test.pl %1
Затем вы можете просто перетащить файл на файл .cmd для выполнения.
click -> send to
в оболочке.
- person Robert P; 01.04.2009
Эй! Пожалуйста, не создавайте скрипт-оболочку/cmd, когда вам это не нужно.
Зайдите в свой реестр или диалоговое окно «Тип файла» в Windows и переопределите действие Perl по умолчанию, чтобы сказать:
"C:\path-to-perl-folders\perl.exe" "%1" %*
Это приведет к тому, что двойной щелчок на .PL запустит perl.exe с именем файла, по которому дважды щелкнули (%1). Работа с %* (передача любых аргументов имени файла Perl-скрипту) сложнее.
Снова зайдите в реестр (на самом деле, это не так страшно, как думают люди) и найдите/создайте ключ «shellex» в классе Perl, а затем создайте подраздел с именем «DropHandler» со строковым значением по умолчанию «{86C86720». -42A0-1069-A2E8-08002B30309D}" (по крайней мере, это мой DropHandler в американской версии Windows XP).
Это позволяет файлам .pl (фактически, всему, что связано с классом Perl) иметь обработчик перетаскивания, который сообщает проводнику, что делать, когда вы перетаскиваете файл(ы) в сценарий .pl. В данном случае это просто означает «запустить Perl-скрипт с удаленными файлами в качестве аргументов».
Хммм, я не думаю, что объяснил это очень хорошо, но именно так я настроил Perl (запуск с сетевого диска) для крупной инженерной организации. Google для Perl и DropHandler, и вы сможете получить скрипт .reg Registry, который сделает это за вас.
Вот еще одна альтернатива «обертке», но она требует небольшой модификации скрипта perl:
- Переименуйте ваш скрипт script.pl в script.cmd.
- Добавьте следующее в начало файла:
@SETLOCAL ENABLEEXTENSIONS
@c:\path\to\perl.exe -x "%~f0" %*
@exit /b %ERRORLEVEL%
#!perl
#line 6
# ...perl script continues here...
Скрипт запускается как любой другой пакетный файл. Первые три строки в основном вызывают Perl для самого файла CMD (%~f0
, который работает, только если расширения CMD включены). Параметр -x
для perl.exe указывает Perl пропускать все до строки #!perl
. "#line 6
" просто помогает в отладке.
Это мое предпочтительное решение, когда я мало знаю о целевой системе (и, возможно, не могу редактировать реестр).