도스 빈 배치파일을 하나 생성하여
아래의 코드를 변수를 set하고 종료하는 배치를 테스트해볼 수 있습니다.
rem ---기본 변수 ----------
set sting=%cd%
set sting=%DATE%
set sting=%TIME%
set sting=%RANDOM%
set sting=%ERRORLEVEL%
set sting=%CMDEXTVERSION%
set sting=%CMDCMDLINE%
pause
goto l_end
rem --- 요기는 다른 필요작업이 있으면 넣습니다.
:l_end
▶ SET [변수=[문자열]]
→변수 환경 변수 이름을 지정합니다.
→문자열 변수에 할당할 문자열을 지정합니다.
▶ 매개 변수 없이 'SET'이라고 입력하면, 현재 환경 변수를 볼 수 있습니다.
▶명령 확장을 사용하면 SET는 아래와 같이 바뀝니다.
SET 명령은 변수 이름만으로 호출되며, = 기호나 값으로
그 변수의 값을 표시하지는 않습니다. 예를 들어,
▶ SET P
는 문자 'P'로 시작되는 모든 변수를 표시합니다.
SET 명령은 변수 이름을 현재 환경에서 찾을 수 없으면
ERRORLEVEL을 1로 설정합니다.
▶ SET 명령에서는 환경 변수 이름에 = 기호를 사용할 수 없습니다.
▶ SET 명령에는 아래와 같이 새로운 두 개의 스위치가 추가됩니다.
SET /A 표현식
SET /P 변수=[promptString]
/A 스위치는 = 기호의 오른쪽에 있는 문자열이
수식임을 지정합니다. 이는 계산되어 문자열로 변환되거나
지정한 변수의 새 값으로 만들어진 결과입니다.
표현식 평가기는 매우 간단하며 아래 연산을 지원합니다.
() - 그룹 짓기
! ~ - - 단일 연산자
* / % - 산술 연산자
+ - - 산술 연산자
<< >> - 논리 이동
& - 비트단위 and
^ - 비트단위 상호 배제 or
| - 비트단위 or
= *= /= %= += -= - 할당
&= ^= |= <<= >>=
, - 식 구분 기호
-논리 연산자를 사용하면 표현식 문자열을 인용 부호로 묶어야 합니다.
-표현식에서 숫자가 아닌 문자열은 환경 변수 문자열로
취급하며, 그 값은 사용하기 전에 숫자로 변환됩니다.
-환경 변수 이름이 지정되었지만 현재 환경에서 정의되지 않았으면 0 값이 사용됩니다.
이렇게 하면 환경 변수 값을 가져오기 위해 % 기호를
모두 입력할 필요 없이 환경 변수 값으로 산술 연산을 수행할 수
있습니다.
-명령 스크립트 밖의 명령 줄에서 SET /A를 실행하면,
표현식의 마지막 값이 표시됩니다.
-할당 연산자의 왼쪽에 환경 변수 이름이 있어야 합니다.
숫자 값은 아무 접두어가 없으면
십진수이며, 접두어 0x는 16진수, 0은 8진수를
나타냅니다. 그러므로 0x12, 18는 022와 같습니다.
8진수는 혼동될 수 있다는 것에 주의하십시오: 08과 09는
8, 9가 올바른 8진수가 아니므로 잘못된 수입니다.
/P 스위치는 변수의 값을 사용자가 입력한 입력 줄에 설정하도록
허용합니다. 입력 줄을 읽기 전에 지정한 promptString을 표시합니다.
PromptString을 비어둘 수 있습니다.
환경 변수 대체를 다음과 같이 확장했습니다:
%PATH:str1=str2%
은(는) "str2" 문자열을 가진 확장된 결과에 나타나는 각 "str1" 문자열을
대체하는 PATH 환경 변수를 확장합니다. 확장된 출력에 나타나는 모든
"str1" 문자열을 효과적으로 삭제하기 위해 "str2" 문자열을 비어둘 수
있습니다. "str1" 문자열이 별표(*)로 시작할 수 있습니다. 이 경우에는
확장된 출력의 시작 부분에서부터 str1의 나머지 부분의 첫 문자열까지의
모든 문자열을 일치시킵니다.
또한 확장용 하위 문자열을 지정할 수 있습니다.
set MINPATH = %PATH:~10,5%
은(는) PATH 환경 변수를 확장한 다음 확장된 결과의 11(10 오프세트)번째
문자에서 시작한 5 문자만 사용합니다. 길이를 지정하지 않으면 기본값을
변수 값의 나머지로 지정합니다. 두(오프세트 또는 길이) 수 모두 음수이면,
사용한 수는 오프세트 또는 지정한 길이에 추가된 환경 변수 값의
길이입니다.
%PATH:~-10%
은(는) PATH 변수의 마지막 10 문자를 추출합니다.
%PATH:~0,-2%
은(는) PATH 변수의 2 문자만 제외한 모든 문자를 추출합니다.
지연된 환경 변수 확장명에 대한 지원이 추가되었습니다. 이 지원은 항상
기본적으로 사용할 수 없지만 /V 명령줄을 CMD.EXD로 전환하여 사용할 수 있거나
사용할 수 없게 될 수 있습니다. CMD /?를 참조하십시오.
지연된 환경 변수 확장명은 텍스트의 줄을 실행할 때가 아니라
읽을 때 발생한 현재 확장명의 한계를
극복하는데 유용합니다. 다음 예제는
직접 변수 확장명에 나타나는 문제를 보여줍니다:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo If you see this, it worked
)
양쪽 IF 설명에 있는 %VAR%가
첫 번째 IF 설명을 읽을 때 대체되고
논리적으로 복합문인 IF의 본문을 포함하기 때문에 메시지를
표시하지 않습니다. 그래서 복합문에 있는 IF가 결코 같을 수 없는
"before"과 "after"를 비교하고 있습니다. 유사하게, 다음 예제는
예상한 것처럼 작업하지 않습니다:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
현재 디렉터리에 파일 목록을 만들지 않지만,
대신 LIST 변수를 최근에 찾은 파일에 설정합니다.
다신 한번, 이것은 %LIST% 변수가 FOR 설명을 읽을 때
한번 확장되었고 그때 LIST 변수가 비었기 때문입니다.
실행하고 있는 실제 FOR loop는:
for %i in (*) do set LIST= %i
이것은 LIST를 최근에 찾은 파일에 설정합니다.
지연된 환경 변수 확장명은 실행 시간에 환경 변수를
확장하도록 다른 문자(느낌표)를 사용하도록
허용합니다. 지연된 변수 확장명을 사용할 수 있으면,
위의 예제가 의도된 대로 다음과 같이 작업하도록 쓰여질 수 있습니다:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo 이렇게 되면
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
명령 확장을 사용하면 확장될 수 있으나 SET에 의해
표시되는 변수 목록에 나타나지 않는 몇몇의
동적 환경 변수가 있습니다. 이 변수 값은
변수 값이 확장될 때마다 동적으로 계산됩니다.
사용자가 변수를 이 이름 중 하나로 분명하게 정의하면
이 정의가 아래에 설명된 동적 변수를 무시합니다:
%CD% - 현재 디렉터리 문자열로 확장합니다.
%DATE% - DATE 명령과 같은 포맷을 사용하여 현재 날짜로 확장합니다.
%TIME% - TIME 명령과 같은 포맷을 사용하여 현재 시간으로 확장합니다.
%RANDOM% - 0과 32767 사이에 있는 임의 숫자로 확장합니다.
%ERRORLEVEL% - 현재 ERRPRLEVEL 값으로 확장합니다
%CMDEXTVERSION% - 현재 명령 프로세서 확장자 버전 번호로
확장합니다.
%CMDCMDLINE% - 명령 프로세서를 호출하는 원본 명령줄로
확장합니다.