Как создавать программы Strawberry Perl с возможностью перетаскивания?

StackOverflow https://stackoverflow.com/questions/705851

Вопрос

у меня есть Клубничный Перл программа, которая принимает один файл в качестве аргумента командной строки.Как мне настроить так, чтобы я мог перетащить нужный файл в программу Strawberry Perl (или в ее оболочку), и программа запустилась бы с именем этого файла в качестве аргумента?

Это было полезно?

Решение

В Windows (проверено с XP) вы можете создать файл .cmd и просто запустить программу Perl с аргументом %1 для передачи имени файла, как если бы он выполнялся из командной строки.

perl c:\test.pl %1

Затем вы можете просто перетащить файл в файл .cmd для выполнения.

Другие советы

Эээ!Пожалуйста, не создавайте сценарий-оболочку/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, который сделает это за вас.

Вот еще одна альтернатива «обертке», но она требует небольшой модификации Perl-скрипта:

  1. Переименуйте сценарий script.pl в script.cmd.
  2. Добавьте следующее в начало файла:

@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"просто помогает в отладке.

Это мое предпочтительное решение, когда я мало что знаю о целевой системе (и, возможно, не смогу редактировать реестр).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top