메모
dos batch set p 옵션...펌
맘편한넘
2012. 7. 23. 18:06
10
배치 스크립트에서 변수를 확인하거나, 만드는 등의 관리를 하는 명령어인 Set에 대해 알아보자.
우선 Win + R을 눌러 실행 창을 열고 cmd라고 입력해보자.
set을 입력해보면 현재 시스템에 설정되어 있는 환경변수들을 모두 출력해준다.
그리고 set path를 입력하면 환경변수 PATH의 내용을 출력해준다.
또 이번엔 set p라고 입력시키면 변수 이름이 P로 시작되는 모든 변수가 출력해준다.
그런데 만약 해당 변수 이름이 없다면 어떻게 될까?
바로 ERRORLEVEL이라는 상태 변수를 1로 설정하게 되는데, 이 것도 후일 응용할 수가 있다는 것을 기억하도록 하자.
Set의 기본 형태는 여기까지 알아보기로 하고, 스크립트에서 주로 사용하는 확장 형태를 알아보자.
Set의 확장 형태
SET 변수=문자열
여기에서 변수는 문자열을 저장할 공간의 이름을 말한다.
또한, Batch에서는 띄어쓰기(매우 중요!)가 짜증날 정도로 까다롭다.
SET 확장 형태에는 2가지의 스위치가 존재한다.
1. SET /A 스위치
/A 스위치는 인용부호( " )로 묶여진 부분을 수식으로 간주하여 계산한 결과를 반환한다.
일반적인 프로그래밍 언어나 수식 표현에서 쓰이는 방법과 차이가 없다.
수의 표현은 16진수는 0x를 시작으로 표기하며, 8진수는 0을 시작으로 표기한다.
() || 그룹 짓기
! ~ - || 단일 연산자
* / % || 산술 연산자
+ - || 산술 연산자
<< >> || 논리 이동
& || 비트단위 AND
^ || 비트단위 상호 배제 OR (XOR)
| || 비트단위 OR
= *= /= %= += -= || 할당
&= ^= |= <<= >>= , || 식 구분 기호
대부분이 기본적으로 쓰여지는 연산자이기에 별도의 설명은 하지 않겠다.
단, !의 경우 비트 전체를 기준으로 1이면 0을, 0이면 1을 반환하고, ~의 경우 비트 단위 NOT 연산임을 기억하자.
예를 들어 '''SET /A "2048 >> 2"'''라고 입력을 한다면, 결과로는 512가 출력될 것이다.
이어서, SET /A TEST="2048 >> 2" 라고 입력을 한 후에 ECHO %TEST% 라고 입력을 하면 저장된 TEST에 저장됬을 512가 출력이 될 것이다.
이런 식으로 /A 스위치는 "수식" 과 같은 형태로 사용이 되며, 다양한 방법으로 이용할 수가 있다..
2. SET /P 스위치
/P 스위치는 사용자에게 입력받은 값을 변수에 대입하는 옵션으로, 아래와 같은 형태를 가지고 있다.
SET /P 변수=[promptString]
promptString은 일종의 안내 메시지다.
SET /P TEST=값을 입력하세요. :
라고 입력을 할 경우, "값을 입력하세요. : " 라는 문구가 뜨면서 입력을 기다린다.
여기에선 1024를 입력한 후에 ECHO %TEST% 라고 입력을 하면 입력했던 1024가 출력된다.
즉, /P 스위치는 사용자의 입력을 변수에 바로 저장한다는 이야기이다.
또한, 출력되는 안내 메시지는 다양한 형태로 가공될 수가 있다.
예를 들어,
내 기준으로는 이런 식의 출력이 보여진다.
하지만 여기에서 _NT를 _Se7en으로 바꾸어 보여주고 싶다면 어떻게하면 좋을까?
바로 이렇게 하면 된다.
또한, 여기에서 _Se7en을 빼고 {{{SET /P TEST=%OS:_NT=%}}} 라고 입력한다면 _NT 부분만 제거가 된다.
끝으로, 문자열을 원하는 길이만큼만 출력하는 것도 가능하다.
기존의 프로그래밍 언어 등에서 Left, Right 등의 문자열 추출 함수와 같은 역할을 한다.
~ 기호 뒤에 숫자가 하나인 경우에는 그 숫자가 표시될 기준이 된다.
2라고 한 경우, Windows_NT라는 문자열의 2번째 위치인 i 이후부터 표시가 되고,
-2라고 한 경우, Windows_NT라는 문자열의 뒤에서부터 2번째 위치인 N부터 표시가 되는 것이다.
~ 뒤에 2개의 숫자가 붙는 경우엔 양수, 음수에 따라 차이가 있다.
앞에 있는 숫자가 양수
* 앞에서부터 시작하는 시작점
앞에 있는 숫자가 음수
* 뒤에서부터 시작하는 시작점
뒤에 있는 숫자가 양수
* 시작점에서부터 표시할 문자의 갯수
뒤에 있는 숫자가 음수
* 뒤에서부터 제외할 문자의 길이
이러한 점을 이용하면 경로 등의 표시에서 상당히 유용하게 이용할 수 있을 것이다.
우선 Win + R을 눌러 실행 창을 열고 cmd라고 입력해보자.
set을 입력해보면 현재 시스템에 설정되어 있는 환경변수들을 모두 출력해준다.
그리고 set path를 입력하면 환경변수 PATH의 내용을 출력해준다.
또 이번엔 set p라고 입력시키면 변수 이름이 P로 시작되는 모든 변수가 출력해준다.
그런데 만약 해당 변수 이름이 없다면 어떻게 될까?
바로 ERRORLEVEL이라는 상태 변수를 1로 설정하게 되는데, 이 것도 후일 응용할 수가 있다는 것을 기억하도록 하자.
Set의 기본 형태는 여기까지 알아보기로 하고, 스크립트에서 주로 사용하는 확장 형태를 알아보자.
Set의 확장 형태
SET 변수=문자열
여기에서 변수는 문자열을 저장할 공간의 이름을 말한다.
또한, Batch에서는 띄어쓰기(매우 중요!)가 짜증날 정도로 까다롭다.
SET 확장 형태에는 2가지의 스위치가 존재한다.
1. SET /A 스위치
/A 스위치는 인용부호( " )로 묶여진 부분을 수식으로 간주하여 계산한 결과를 반환한다.
일반적인 프로그래밍 언어나 수식 표현에서 쓰이는 방법과 차이가 없다.
수의 표현은 16진수는 0x를 시작으로 표기하며, 8진수는 0을 시작으로 표기한다.
() || 그룹 짓기
! ~ - || 단일 연산자
* / % || 산술 연산자
+ - || 산술 연산자
<< >> || 논리 이동
& || 비트단위 AND
^ || 비트단위 상호 배제 OR (XOR)
| || 비트단위 OR
= *= /= %= += -= || 할당
&= ^= |= <<= >>= , || 식 구분 기호
대부분이 기본적으로 쓰여지는 연산자이기에 별도의 설명은 하지 않겠다.
단, !의 경우 비트 전체를 기준으로 1이면 0을, 0이면 1을 반환하고, ~의 경우 비트 단위 NOT 연산임을 기억하자.
예를 들어 '''SET /A "2048 >> 2"'''라고 입력을 한다면, 결과로는 512가 출력될 것이다.
이어서, SET /A TEST="2048 >> 2" 라고 입력을 한 후에 ECHO %TEST% 라고 입력을 하면 저장된 TEST에 저장됬을 512가 출력이 될 것이다.
이런 식으로 /A 스위치는 "수식" 과 같은 형태로 사용이 되며, 다양한 방법으로 이용할 수가 있다..
2. SET /P 스위치
/P 스위치는 사용자에게 입력받은 값을 변수에 대입하는 옵션으로, 아래와 같은 형태를 가지고 있다.
SET /P 변수=[promptString]
promptString은 일종의 안내 메시지다.
SET /P TEST=값을 입력하세요. :
라고 입력을 할 경우, "값을 입력하세요. : " 라는 문구가 뜨면서 입력을 기다린다.
여기에선 1024를 입력한 후에 ECHO %TEST% 라고 입력을 하면 입력했던 1024가 출력된다.
즉, /P 스위치는 사용자의 입력을 변수에 바로 저장한다는 이야기이다.
또한, 출력되는 안내 메시지는 다양한 형태로 가공될 수가 있다.
예를 들어,
1
2 |
> SET /P TEST= %OS% : [ Enter ] Windows_NT : [ Waiting user input... ] |
내 기준으로는 이런 식의 출력이 보여진다.
하지만 여기에서 _NT를 _Se7en으로 바꾸어 보여주고 싶다면 어떻게하면 좋을까?
바로 이렇게 하면 된다.
1
2 |
> SET /P TEST= %OS :_NT =_Se7en% : [ Enter ] Windows_Se7en : [ Waiting user input... ] |
또한, 여기에서 _Se7en을 빼고 {{{SET /P TEST=%OS:_NT=%}}} 라고 입력한다면 _NT 부분만 제거가 된다.
끝으로, 문자열을 원하는 길이만큼만 출력하는 것도 가능하다.
기존의 프로그래밍 언어 등에서 Left, Right 등의 문자열 추출 함수와 같은 역할을 한다.
1
2
3
4
5
6
7 |
@ 앞에서부터 2개의 문자 제외 > SET /P TEST= %OS:~2% : [ Enter ] ndows_NT : [ Waiting user input ] @ 뒤에서부터 2개의 문자 표시 > SET /P TEST= %OS:~-2% : [ Enter ] NT : [ Waiting user input ] |
~ 기호 뒤에 숫자가 하나인 경우에는 그 숫자가 표시될 기준이 된다.
2라고 한 경우, Windows_NT라는 문자열의 2번째 위치인 i 이후부터 표시가 되고,
-2라고 한 경우, Windows_NT라는 문자열의 뒤에서부터 2번째 위치인 N부터 표시가 되는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
@ 5번째 문자에서부터 2개의 문자만 표시 > SET /P TEST= %OS:~5,2% : [ Enter ] ws : [ Waiting user input ] @ 5번째 문자부터 시작, 뒤에서부터 2번째 문자까지 표시 > SET /P TEST= %OS:~5,-2% : [ Enter ] ws_ : [ Waiting user input ] @ 뒤에서부터 10번째 문자부터 시작, 3개의 문자만 표시 > SET /P TEST= %OS:~-10,3% : [ Enter ] Win : [ Waiting user input ] @ 뒤에서부터 10번째 문자부터 시작, 3개의 문자만 제외 > SET /P TEST= %OS:~-10,-3% : [ Enter ] Windows : [ Waiting user input ] |
~ 뒤에 2개의 숫자가 붙는 경우엔 양수, 음수에 따라 차이가 있다.
앞에 있는 숫자가 양수
* 앞에서부터 시작하는 시작점
앞에 있는 숫자가 음수
* 뒤에서부터 시작하는 시작점
뒤에 있는 숫자가 양수
* 시작점에서부터 표시할 문자의 갯수
뒤에 있는 숫자가 음수
* 뒤에서부터 제외할 문자의 길이
이러한 점을 이용하면 경로 등의 표시에서 상당히 유용하게 이용할 수 있을 것이다.