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

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


person skiphoppy    schedule 01.04.2009    source источник
comment
Я считаю, что это больше зависит от вашей операционной системы, чем от вашего языка программирования. Какую ОС и версию вы используете?   -  person Jack M.    schedule 01.04.2009
comment
@ Джек М. - Strawberry Perl — это новый официальный Perl для Windows. Таким образом, операционная система подразумевается в моем вопросе для (я полагаю) любого, кто знает ответ.   -  person skiphoppy    schedule 01.04.2009
comment
Для ясности: Strawberry Perl — поддерживаемый сообществом Perl для Windows со встроенным компилятором gcc. Хотя это и не официальный perl (неуместная для Perl концепция), он стал довольно популярным за последние пару лет. strawberryperl.com   -  person xdg    schedule 02.04.2009


Ответы (3)


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

perl c:\test.pl %1

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

person Frakkle    schedule 01.04.2009
comment
Вы также можете поместить этот файл в папку «Отправить», а затем click -> send to в оболочке. - person Robert P; 01.04.2009
comment
Фраккл, ты мужчина! Дополнительный вопрос: как сделать так, чтобы окно консоли не закрывалось сразу после отображения его вывода? :) - person skiphoppy; 01.04.2009
comment
Роберт, спасибо; У меня есть коллега, который хотел, чтобы это работало именно так. - person skiphoppy; 01.04.2009
comment
Ответ на мой дополнительный вопрос: пауза - person skiphoppy; 01.04.2009
comment
@skiphoppy — добавьте && паузу в конец команды, которую вы выполняете. Например, я сделал оболочку для команды проверки RCS (co.exe) на своем рабочем столе (вот тот случай, когда обертка хороша!). Содержимое оболочки просто говорит co.exe -l %1 && pause, и оно будет приостановлено после извлечения файла! - person jimtut; 01.04.2009
comment
джимтут правильно; вы можете добавить паузу, чтобы он ждал, пока вы не нажмете клавишу. - person Frakkle; 01.04.2009
comment
Будьте осторожны с паузой &&... это приведет к паузе только в том случае, если предыдущая команда успешна. Вместо этого используйте & pause (чтобы всегда делать паузу) или || пауза (для паузы только при ошибках). - person ijprest; 05.09.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, который сделает это за вас.

person jimtut    schedule 01.04.2009
comment
Хороший звонок! Я не знал об этом. Конечно, преимущество метода сценария-оболочки в том, что его очень легко развернуть на других машинах. Я полагаю, что у обоих методов есть свои плюсы и минусы, но это классное решение. - person Frakkle; 01.04.2009

Вот еще одна альтернатива «обертке», но она требует небольшой модификации скрипта 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" просто помогает в отладке.

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

person ijprest    schedule 29.06.2009