2009-04-01 7 views
12

단일 파일을 명령 줄 인수로 허용하는 Strawberry Perl 프로그램이 있습니다. 원하는 파일을 Strawberry Perl 프로그램 (또는 그 주위의 래퍼)에 끌어다 놓을 수있는 방법을 설정하면 프로그램이 해당 파일 이름을 인수로 사용하여 실행됩니까?드래그 앤 드롭 Strawberry Perl 프로그램은 어떻게 만듭니 까?

+0

저는 이것이 프로그래밍 언어보다 운영 체제에 훨씬 더 달려 있다고 생각합니다. 어떤 OS와 버전을 사용하고 있습니까? –

+2

@Jack M. - Strawberry Perl은 Windows 용 새 공식 Perl입니다. 따라서 운영체제는 내 질문에 내 대답에 대해 알고있는 모든 사람에게 내재되어있다. – skiphoppy

+0

@Jack M : 오, 반짝! – belgariontheking

답변

20

Windows에서 (XP로 테스트 한) 커맨드 라인에서 실행되는 것처럼 .cmd 파일을 생성하고 % 1 인수를 사용하여 Perl 프로그램을 실행하여 파일 이름을 전달할 수 있습니다.

perl c:\test.pl %1 

그러면 파일을 .cmd 파일로 끌어서 놓기 만하면됩니다.

+0

또한이 파일을 '보내기'폴더에 드롭하면 셸에서 바로 '클릭 -> 보내기'할 수 있습니다. –

+0

Frakkle, 너는 남자 야! 추가 질문 : 출력을 표시 한 직후에 콘솔 창이 닫히지 않게하려면 어떻게합니까? :) – skiphoppy

+0

Robert, thanks; 나는 그런 식으로 일하기를 원하는 직장 ​​동료가 있습니다. – skiphoppy

18

eeek! 필요하지 않은 경우 래퍼 스크립트/cmd를 만들지 마십시오.

말을 당신의 레지스트리 또는 Windows에서 파일 형식 대화 상자로 이동하여 펄의 기본 동작을 재정의 :

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

이 이름으로하여 Perl.exe 시작 통해 .pl을 더블 클릭의 원인이됩니다 두 번 클릭 한 파일 (% 1)의. Perl 스크립트에 모든 파일 이름 인수를 전달하는 % * 작업은 까다 롭습니다.

다시 레지스트리로 들어가서 Perl 클래스에서 "shellex"키를 찾아서 만들거나 기본 문자열 값으로 "DropHandler"라는 하위 키를 만듭니다 (실제로는 사람들이 생각하는 것처럼 무섭지 않습니다) "{86C86720-42A0-1069-A2E8-08002B30309D}"(적어도 Windows XP의 미국 버전 DropHandler)입니다.

.pl 파일 (실제로는 Perl 클래스와 관련된 모든 것)에 .pl 스크립트에 파일을 놓을 때 수행 할 작업을 탐색기에 알려주는 드롭 처리기가 있습니다. 이 경우에는 "삭제 된 파일을 인수로 사용하여 Perl 스크립트를 실행하는"것을 의미합니다.

흠, 나는 그렇게 잘 설명하지 못했지만 큰 엔지니어링 조직을 위해 Perl (네트워크 드라이브를 실행)을 설정 한 방법입니다. Google for Perl 및 DropHandler를 사용하면이 작업을 수행 할 수있는 .reg 레지스트리 스크립트를 얻을 수 있습니다.

+1

전화하세요! 나는 이것을 알지 못했다. 물론 래퍼 스크립트 방법의 장점은 다른 컴퓨터에 배포하는 것이 매우 쉽다는 것입니다. 내가 생각하기에 두 가지 방법에 대한 장단점이 있지만 이것은 멋진 해결책입니다. – Frakkle

1

는 여기에 "래퍼"또 다른 대안, 그러나 그것은 펄 스크립트에 약간의 수정이 필요합니다

  1. 이 script.pl 스크립트가 script.cmd에 이름을 바꿉니다.

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

:

  • 은 파일의 맨 위에 다음을 추가 스크립트는 다른 배치 파일처럼 실행됩니다. 처음 세 행은 기본적으로 CMD 파일 자체에서 Perl을 호출합니다 (%~f0, CMD 확장이 켜져있는 경우에만 작동 함). Perl.exe의 -x 부분계는 #!perl 줄까지 모든 항목을 건너 뜁니다. "#line 6"은 디버깅에 도움이됩니다.

    대상 시스템에 대해 잘 모르는 경우 (레지스트리를 편집하지 못할 수도 있음) 내 선호하는 솔루션입니다.