배치 파일에서 %와 %%의 차이점
배치 프로그래머는 배치 파일에서 사용될 때 종종 단일 퍼센트(%
)와 이중 퍼센트(%%
) 기호를 혼동합니다. 명령줄에서 실행할 때 FOR
명령은 %f
를 사용하는 반면 Batch 파일에서는 단일 백분율 기호 대신 %%f
를 사용합니다.
기호 %
, %%
, %variable%
및 !variable!
몇 가지 기본적인 차이점이 있으며 명령줄과 배치 파일에서 뚜렷하게 사용됩니다.
이 튜토리얼은 Batch 파일에서 %
와 %%
의 차이점을 보여줍니다. 또한 환경 변수 및 루프 변수와 함께 Batch 파일 및 cmd에서 %
및 %%
의 사용에 대해 설명합니다.
CMD에서 %
및 %%
사용
명령줄 셸에서 %variable
은 교체 가능한 단일 문자 매개 변수를 지정합니다. Ms-DOS는 대체 가능한 명령줄 매개변수로 %1,%2,...,%9
를 사용합니다. 즉, %1
은 배치 파일에 전달되는 첫 번째 매개변수로 대체됩니다.
다음 예는 변수(%a
)가 있는 단일 백분율 기호가 null
문자로 작동함을 보여줍니다.
set a="Hello World"
echo %a
%VARIABLE%
과 같이 변수의 양쪽에 퍼센트 기호를 사용하면 환경변수 역할을 하며 echo
명령과 함께 사용하면 설정값을 표시한다. %VARIABLE%
은 set
명령으로 설정하고 echo
명령으로 액세스할 수 있습니다.
아래에 그 예가 나와 있습니다.
set a="Hello World"
echo %a%
배치 파일에서 %
및 %%
사용
배치 파일에서 명령줄 셸은 모든 명령을 왼쪽에서 오른쪽으로 읽습니다. 퍼센트 기호를 읽으면 다음 문자를 확인하여 진행합니다.
%%
를 단일 %
로 읽습니다. 즉, %%
를 단일 퍼센트로 바꾸고 세 번째 문자를 읽습니다. FOR
루프에 있는 경우 FOR
루프에서와 같이 평가합니다.
다음 예는 FOR
루프에서 %%
의 사용을 설명합니다.
FOR /L %%3 in (1,1,3) Do Echo %%3
PAUSE
출력:
FOR
루프가 아닌 경우 일반 문자로 읽고 명령줄 셸에서 직접 실행할 때 %variable
명령과 동일하게 실행됩니다.
set a="Hello World"
echo %%a
PAUSE
출력:
%
기호 뒤의 문자가 숫자이면 명령줄 매개변수로 읽힙니다. %
뒤의 문자가 %
기호도 숫자도 아닌 경우 다음 %
기호까지 변수로 읽힙니다. 그러면 해당 값이 표시됩니다.
예를 들어,
set a="Hello World"
echo %a%
PAUSE
출력:
50%
와 같은 배치 파일에서 일반 %
기호를 사용하려면 단일 %
기호 대신 %%
를 사용해야 합니다.
set a="The battery is charged 50%%"
echo %a%
PAUSE
출력:
%
및 %%
는 주로 FOR
명령에서 사용됩니다. FOR
명령이 배치 파일 외부에서 사용될 때 단일 %
기호가 잘 작동합니다.
단, Batch 파일 내에서 사용하는 경우 오류를 방지하기 위해 %%
를 두 개로 대체해야 합니다. 또한 FOR
명령 매개변수로 %
기호가 있는 숫자를 사용하지 않는 것이 좋습니다.
배치 파일에서 지연 확장 사용
때때로 Batch 파일에서 %VARIABLE%
을 사용하면 결과가 인쇄되지 않습니다. 퍼센트 확장을 하면 실행 전, 즉 파싱 시점에 변수가 확장되기 때문이다.
루프에서 사용할 때 변수는 한 번만 확장됩니다.
이를 해결하기 위해 지연된 확장, 즉 백분율 기호(%variable%
) 대신 느낌표(!variable!
)를 사용할 수 있습니다. 지연된 확장이 활성화되면 실행 시간에 변수가 확장됩니다.
루프에서는 루프가 반복될 때마다 확장됩니다. 따라서 !
를 사용하여 변수를 확장합니다. 주로 루프를 사용할 때 %
대신 사용하는 것이 좋습니다.
지연된 확장을 활성화하려면 SETLOCAL EnableDelayedExpansion
명령으로 수행하고 %
를 !
로 바꾸면 됩니다(아래 예 참조).
@echo off
setlocal EnableDelayedExpansion
:: count to 5, storing results in a variable
set n=0
FOR /l %%G in (1,1,5) Do (echo [!n!] & set /a n+=1)
echo Total = %n%
출력:
그래서 우리는 Batch 파일과 cmd에서 사용될 때 %
와 %%
기호의 차이점에 대해 논의했습니다. 지연된 확장 사용을 포함하여 거의 모든 것을 다루었습니다.