배치 파일에서 %와 %%의 차이점

Siddharth Bishnoi 2024년2월15일
  1. CMD에서 %%% 사용
  2. 배치 파일에서 %%% 사용
  3. 배치 파일에서 지연 확장 사용
배치 파일에서 %와 %%의 차이점

배치 프로그래머는 배치 파일에서 사용될 때 종종 단일 퍼센트(%)와 이중 퍼센트(%%) 기호를 혼동합니다. 명령줄에서 실행할 때 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

CMD에서 % 사용

%VARIABLE%과 같이 변수의 양쪽에 퍼센트 기호를 사용하면 환경변수 역할을 하며 echo 명령과 함께 사용하면 설정값을 표시한다. %VARIABLE%set 명령으로 설정하고 echo 명령으로 액세스할 수 있습니다.

아래에 그 예가 나와 있습니다.

set a="Hello World"
echo %a%

출력 - CMD에서 % 사용

배치 파일에서 %%% 사용

배치 파일에서 명령줄 셸은 모든 명령을 왼쪽에서 오른쪽으로 읽습니다. 퍼센트 기호를 읽으면 다음 문자를 확인하여 진행합니다.

%%를 단일 %로 읽습니다. 즉, %%를 단일 퍼센트로 바꾸고 세 번째 문자를 읽습니다. FOR 루프에 있는 경우 FOR 루프에서와 같이 평가합니다.

다음 예는 FOR 루프에서 %%의 사용을 설명합니다.

FOR /L %%3 in (1,1,3) Do Echo %%3
PAUSE

for 루프에서 %% 사용

출력:

출력 - for 루프에서 %% 사용

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에서 사용될 때 %%% 기호의 차이점에 대해 논의했습니다. 지연된 확장 사용을 포함하여 거의 모든 것을 다루었습니다.

관련 문장 - Batch Command