call 사용시 파라미터를 전달할 수 있다.
@echo off
call :lbl_func abcd1 defg2
pause
goto :eof
:lbl_func
echo %1
goto :eof
%1 ~ %n 형식으로 받아서 처리할 수 있는데 위와 같이 abcd1 로 전달하면 %1 로 첫번째 파라미터를 가져올 수 있다.
공백을 구분자로 취급하는게 문제된다.
@echo off
for /f "delims=" %%i in (list.txt) do call :lbl_func %%i
goto :eof
:lbl_func
echo %1
goto :eof
line1
#line2
line3 line32
> test_call.bat
line1
#line2
line3
>
list.txt 에 있는 줄들을 가져와서 :lbl_func 로 전달했는데 줄 전체가 전달되었지만 3번째 줄에서 공백이 있기 때문에 line32 는 찍히지 않았다.
@echo off
for /f "delims=" %%i in (list.txt) do call :lbl_func "%%i"
goto :eof
:lbl_func
echo %~1
goto :eof
>test_call.bat
line1
#line2
line3 line32
인용부호(") 로 묶어서 보내고 %~1로 인용부호를 제거하도록 해서 처리가 가능하다. 위 for 문에서는 문제가 없는데 전달될 문자열에 인용부호(") 가 있다면 문제가 되는 경우가 있었다.
@echo off
for /f "delims=" %%i in (list.txt) do call :lbl_func %%i
goto :eof
:lbl_func
echo %*
goto :eof
만약 하나의 파람만 전달되는 형태라면 %* 를 사용해 전체 파라미터를 가져와서 처리할 수 있다.
참고 : https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call
728x90