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

 

call

Reference article for the call command, which calls one batch program from another without stopping the parent batch program.

docs.microsoft.com

 

728x90

+ Recent posts