배치파일에서 순서에 상관 없는 파라미터를 사용하기 위한 스크립트 템플릿입니다.
CMD에서 배치파일을 작성하다 보면 파라미터들이 많은 경우 순서나 왜 이런 인자를 전달했는지 햇갈리는 경우가 종종 발생합니다.
이를 해결하고자 파라미터에 이름을 부여하고 순서에 상관 없이 전달 할 수 있게 만들고자 합니다.
DISM에서 사용하는 방식처럼 각각의 인자는 /<파라미터 이름>
으로 전달되는 것을 기본으로 하였습니다.
그리고 값은 :(콜론)
뒤에 넣도록 작성하였습니다.
다시 말해서 인자를 전달하려면 <배치파일 이름.bat> /<파라미터 이름>:<값>
의 형태로 전달하면 됩니다.
또한 스위치 인자를 사용할 수 있습니다.
REM Parsing parameters
IF [%1]==[] ( GOTO usage )
FOR %%i IN (%*) DO (
FOR /f "tokens=1* delims=:" %%j IN ("%%i") DO (
REM 이 곳에 선언하고 싶은 파라미터를 작성하시면 됩니다.
REM 작성 형태는 다음과 같습니다.
REM IF [%%j]==[/<원하는 파라미터 이름>] (
REM SET <원하는 파라미터 이름>==%%k )
REM 만약 파라미터가 디렉터리와 같이 문자열 형태를 나타낼 경우 큰 따옴표가 있을 수 있습니다.
REM 이를 제거하기 위하여 문자열 파라미터는 아래와 같이 작성합니다.
REM IF [%%j]==[/<문자열 파라미터 이름>] (
REM SET <문자열 파라미터 이름>==%%~k )
REM 만약 파라미터가 스위치 형태를 같는 경우에는 아래와 같이 작성합니다.
REM IF [%%j]==[/<스위치 파라미터 이름>] (
REM SET <스위치 파라미터 이름>=true )
REM 아래는 예제입니다.
IF [%%j]==[/par1] (
SET par1=%%~k )
IF [%%j]==[/par2] (
SET par2=%%k )
IF [%%j]==[/Verbose] (
SET verbose=true )
)
)
필수 항목의 파라미터를 작성하는 방법은 아래와 같습니다.
REM Parsing parameters
IF [%1]==[] ( GOTO usage )
FOR %%i IN (%*) DO (
FOR /f "tokens=1* delims=:" %%j IN ("%%i") DO (
REM 이 곳에 선언하고 싶은 파라미터를 작성하시면 됩니다.
REM 필수 항목 역시 기본적인 파라미터 작성법과 동일하게 작성합니다.
REM IF [%%j]==[/<필수 파라미터 이름>] (
REM SET <필수 파라미터 이름>==%%k )
REM 아래는 예제입니다.
IF [%%j]==[/par3] (
SET par3=%%k )
)
)
REM 이후 필수 파라미터는 아래 위치에 만약 파라미터의 값이 없을 경우 추가적으로 처리하는 루틴을 작성합니다.
REM Set mandantory parameters behaiver
IF [%par3%]==[] GOTO usage
-
문자열 파라미터 입력을 받을 때, 띄어쓰기 처리가 안됩니다. 즉,
unorderedparmetertemplates.bat /par1:"aaa"
는 가능하지만unorderedparmetertemplates.bat /par1:"aaa bbb"
는 에러가 납니다. -
파라미터 이름을 작성 할 때, 대소문자 구분을 합니다. 만약 파라미터 이름을
/Par
로 작성하였으면 파라미터를 전달 할때도/Par:<value>
로 전달해야 합니다. 그렇지 않으면 에러가 납니다.