2013-02-10 3 views
3

아주 간단한 (하지만 매우 유용 할 것 같은) PowerShell 스크립트를 작성하고 .cmd 파일의 형태로 설치 프로그램을 만들었습니다. 배포판에는 두 개의 .cmd 파일과 두 개의 .ps1 파일이 있습니다. 현재 설치 프로그램 downloads all required files from github입니다.여러 개의 스크립트를 하나의 .cmd 파일에 압축하십시오.

내 목표는 설치 프로그램이 자체 포함되어있어 사람들이 엄격한 방화벽 뒤에서도 사용할 수 있도록하는 것입니다.

한 가지 방법은 다음과 같이 될 수있다 :

echo param(>!filename! 
echo  [string] $pfilename>>!filename! 
echo)>>!filename! 
... 

그러나이 방법은 매우 복잡한 설정 할 수 있습니다 특수 문자를 이스케이프해야합니다. 게다가, 어떻게 든 유용하기 위해서는 자동화되어야합니다.

또 다른 방법은 스크립트 소스 코드를 .cmd 파일에 직접 포함시키고 ::begin file1::end file1 같은 주석으로 표시 한 다음 추출하는 것입니다. 그러나 어떻게?

내 생각 엔 pl2bat을 들여다 보았습니다. 그러나 에는 #!perl 줄 앞의 모든 텍스트를 제거하는 특수 스위치 (-x)가 있으며 pl2bat에 의해 생성 된 .bat 파일은 단지 perl -x으로 실행됩니다. 그래서 나는 pl2bat과 같은 접근법을 사용할 수 없다.

아이디어가 있으십니까?

추신 : NSIS, InnoSetup 및 WiX에 대해 알고 있습니다. 필자는 설치 프로그램을 바이너리가 아닌 텍스트로 설정하여 모든 사람이 무해하다는 것을 알 수 있습니다.

+0

나는 다음과 같은 질문은 거의 동일 본질적으로 생각 : [창 배치에서 단락을 인쇄 (HTTP : // stackoverflow.com/questions/14559789/printing-a-paragraph-in-windows-batch). –

+0

@AndriyM : 감사합니다.이 도움이되었습니다. – utapyngo

답변

0

이 동일한 문제에 직면했을 때 나는 새로운 용어를 고안하지 않고이 목적으로 표준을 사용하기로 선택 했으므로 "resource"요소를 XML specification으로 선택했습니다. 예를 들어

@echo off 
setlocal EnableDelayedExpansion 

rem Extract "FirstSection.txt" and place in its own file: 
call :getResource FirstSection > FirstSection.txt 

rem Extract "SecondSection.txt" and place in its own file: 
call :getResource SecondSection > SecondSection.txt 

goto :EOF 


:getResource resourceId 

rem Resource data start format: ^<resource id="resourceId"^> 
set start= 
set lines= 
for /F "tokens=1,3 delims=:=>" %%a in ('findstr /N "^</*resource" "%~F0"') do (
    if not defined start (
     if "%1" equ "%%~b" set start=%%a 
    ) else (
     if not defined lines set /A lines=%%a-start-1 
    ) 
) 
set line=0 
for /F "skip=%start% tokens=1* delims=]" %%a in ('find /N /V "" ^< "%~F0"') do (
    setlocal DisableDelayedExpansion 
    echo(%%b 
    endlocal 
    set /A line+=1 
    if !line! equ %lines% exit /B 
) 

:이 내 방법입니다

<resource id="FirstSection"> 
Place here 
the contents 
of First Section 
</resource> 

<resource id="SecondSection"> 
The same 
... for Second Section 
</resource> 

안토니오

+0

설치 프로그램에 XML 파일을 압축해야하는 경우 신중하게 사용합니다. 배치 파일은 XML이 아니며 findstr은 XML 파서가 아닙니다. 게다가'id' 속성을 어디에서 확인하는지 알지 못합니다. – utapyngo

+0

@utapyngo :' 줄 사이에 _any_ 텍스트를 포함 할 수 있습니다. 'for/F "토큰 = 1,3 delims = : =" "..."명령은'%% b'의 id 속성, 즉'='와'>'로 구분 된 값을 얻습니다. – Aacini

+0

그래서 코드는''을 받아 들일 것입니다. – utapyngo

관련 문제