OS/Windows Batch File 명령
  • 728x90
    반응형

     

     

     

     

    Batch File 명령어


     

     

     

    도움말

     

    해당 명령어 뒤에/?를 붙이면 도움말이 나온다.

     

    예를 들어 FOR 반복문의 사용법이 궁금하다면FOR/? 또는 HELP FOR로 동일한 결과를 얻을 수 있다.

     

    텍스트 파일로 저장하는 명령어는 뒤에> FILENAME.txt로 출력 결과를 텍스트 파일로 저장한다.

     

    EX)

    FOR/? > "FILENAME.txt"



    ECHO

    ECHO

     

    ECHO는 화면에 메시지를 출력해 준다. 주로 SET, IF, GOTO 등과 결합하여 메뉴를 보여줄 때 많이 사용한다.

     

    보통 배치파일 첫 줄에는 @ECHO OFF 를 해준다. 

     

    만약 @ECHO OFF 를 하지않으면 각 명령줄을 화면에 그대로 출력 하고실행을 하기 때문에 화면이 혼잡해진다.

     

    ECHO 명령어 출력 결과를 텍스트파일로 저장할 수 있다. 

     

    DISKPART를 사용하는 경우 배치파일에서는 DISKPART 다음줄부터 작동하지 않는다. 

     

    이럴 때는 DISKPART 다음줄부터 사용될 명령어를 스크립트로 저장한 다음DISKPART /S스크립트 이렇게 사용해야 한다.

     

     

    EX)

    @echo off

    pushd %~dp0

    echo create vdisk file=d:\test.vhd type=expandable maximum=20480 > test.txt

    echo attach vdisk >> test.txtecho create partition primary >> test.txt

    echo format quick fs=ntfs >> test.txtecho assign letter >> test.txt

    echo exit >> test.txt

    diskpart /s test.txt

     

    위 예제는 윈도우 7에서 D 드라이브에 TEST.VHD 파일을 자동으로 생성하는 기능을 한다.

     

     

    ※ ESCAPE 문자

     

    echo 로 리디렉션을 할때 만약 >> 기호도 echo의 일부분으로 포함시키고 싶을때는 아래와 같이 예와 같이 사용한다.

    echo dir /b >> list.txt >> test.txt

     

    위 구문을 실행하면 test.txt에dir /b부분만 들어간다.dir /b >> list.txt를 넣고 싶은경우 caret 문자^를 붙여주면 된다.

    echo dir /b ^>^> list.txt >> test.txt

     

    PUSHD %~DP0


    FOR 구문의 대체 변수 참조 확장이다. 배치파일에서 %0은 그 배치파일의 전체 경로를 지칭한다. 

    %0 사이에 들어있는 ~dp 는 % 변수를 들라이브 문자와 경로로만 확장해 준다.

     

    %0  "C:\Users\UserName\Desktop\예제.cmd" 
    %~0  C:\Users\UserName\Desktop\예제.cmd 
    %~d0  C: 
    %~p0  \Users\UserName\Desktop\ 
    %~n0  예제 
    %~x0  .cmd 
    %~dp0  C:\Users\UserName\Desktop\ 

     

    따라서 pushd %~dp0 명령어는 명령 프롬프트가 배치파일이 존재하는 위치로 돌아오게 된다.

     

    ※ PUSHD %~DP0 와 CD /D %~DP0 의 동작은 동일하다.

     

     

    TITLE

     

    콘솔창에 표시되는 창 제목을 지정한다.

     

    EX)

    title 콘솔창 제목

     

     

    MODE

     

    콘솔창 크기를 지정한다.

     

    EX) 40열 11행 콘솔창 생성

    mode con cols=40 lines=11

     

     

    COLOR

     

    콘솔창의 화면 색을 지정한다. 첫째 자리는 배경색이고 둘째 자리는 문자색이다.

    0 검정색 1 파랑색 2 초록색
    3 옥색 4 빨강색 5 자주색
    6 노랑색 7 흰색 8 회색
    9 연한 파랑색 A 연한 초록색 B 연한 옥색
    C 연한 빨상색 D 연한 자주색 E 연한 노랑색
    F 밝은 흰색  

     

    EX)

    color 1F

     

     

    CLS

     

    화면을 Clear 한다.

     

     

    PAUSE

     

    일시정지 명령어이다. 아무 키나 누르면 다음 명령어로 넘어간다.

     

     

    IF, IF NOT, IF EXITST, IF ERRORLEVER, ELSE

     

     

    EX) IF 문자열1==문자열2 명령어

    set A=test1

    if %A%==test1 echo %A%는 test1와 같다. 

    set B=test2

    if %B% == test3 echo %B%는 test3와 같다.

     

    첫번째 IF 구문은 조건이 참이기 때는에 "test1 는 test1d와 같다" 문구를 출력해준다. 

    두번째 IF 구문은 조건이 거짓이기 때문에 그 뒤에 나오는 echo 명령어는 무시된다.

    IF 뒤에 /i 를 붙이면 대소문자를 구분하지 않는다.

    숫자 비교에는 아래 비교 연산자들이 사용된다.

     

    EQU 같음
    NEQ 같지 않음
    LSS 보다 작은
    LEQ 작거나 같음
    GTR 보다 큰
    GEQ 크거나 같음

     

    EX)

    if 5 equ 5 echo 5는 5와 같다.
    if 5 neq 5 echo 5는 5와 같지 않다.
    if 5 lss 5 echo 5는 5보다 작다.
    if 5 leq 5 echo 5는 5보다 작거나 같다.
    if 5 gtr 5 echo 5는 5보다 크다.
    if 5 geq 5 echo 5는 5보다 크거나 같다.

      

    IF NOT은 IF 반대로 뒤에 나온 조건이 거짓인 경우에 IF NOT은 참이 되기 때문에 명령을 실행한다.

     

    IF EXIST는 지정한 파일, 폴더가 존재하면 조건이 참이 된다.

     

    EX) 64비트 윈도우인경우 첫번째 echo 출력, 32비트 윈도우인 경우 두번째 echo 출력

    if exitst %windir%syswow64 echo 이 윈도우는 64비트 이다.
    if not exist %windir%syswow64 echo 이 윈도우는 64비트가 아니다.

     

    IF ERRORLEVER실행된 프로그램의 종료코드를 사용해 조건을 판단한다.

     

    일반적으로 오류없이 잘 실행된겨우 종료코드는 0이고, 오류가 발생하면 종료코드는 1이상이다.

     

    EX)

    ren C:\Windows WindowsXPif errorlevel 1 echo 윈도우 폴더는 이름을 변경할 수 없음.

     

    ELSE

     

     

    EX)

    if exist %windir%\syswow64 (echo 이 윈도우는 64비트 이다.)
    else (echo 이 윈도우는 64비트가 아니다.)

     

     

    FOR

    for /f "옵션" %변수 in (문자열, 파일, 명령어의 출력값 등) do 명령어


     

    EX)

    for %a in (*.msu) do start /wait wusa %a /quiet /norestart

      

    옵션

     

    tokens=

     

     

    FOR 구문은 각 행별로 분석하는데 이때 토큰은 각 행의 몇번째 문자열을 전달해 줄지 지정한다. 

    문자열의 기본 구분 단위는 공백이다.

    for /f "tokens=3" %a in ("Hello world !!") do echo %a

     

    위 예제를 입력하면 결과는 세번째 문자열인!!가 출력 된다.

     

    delims=

     

    토큰은 기본적으로 공백으로 구분하는데 delims 뒤에 구분 문자를 지정하면 지정된 구분 문자로 대체 된다.

    for /f "tokens=3" %a in ("I LOVE YOU-SO MUCH") do echo %a

    for /f "tokens=2 delims=-"%ain ("I LOVE YOU-SO MUCH") do echo %a

    for /f "tokens=4 delims=-"%a in ("I LOVE YOU-SO MUCH") do echo %a

     

    첫번째 줄은 delims 가 없기 때문에 공백이 구분 문자라서 세번째 토큰은 YOU-SO 가 된다.

    두번째 줄은 - 문자가 구분자라서 두번째 토큰은 SO MUCH 가 된다.

    세번째 줄은 - 와 공백이 동시에 구분자라서 네번째 토큰은 SO 가 된다.

     

    skip=

     

    위에서 부터 몇줄까지 무시 할지 결정해준다. 필요한 토큰이 세번째 줄에 있다면 skip=2 로 처음 두줄은 무시한다.

     

    usebackq

     

    이 옵션은 공백을 포함한 파일 경로 양쪽에 큰 따옴표를 붙여준다.

    for /f "tokens=1" %a in (MY TEST.TXT) do echo %a

    for /f "tokens=1" %a in ("MY TEST.TXT") do echo %a

    for /f "tokens=1 usebackq" %a in (MY TEST.TXT) do echo %a

     

    위 3 가지 예중 정상적으로 출력 되는건 세번째 줄이다.

    첫번째 줄은 <Y 라는 파일과 TEST.TXT라는 파일을 찾기 때문에 실패한다.

    두번째 줄은 "MY TEST.TXT"를 파일 이름이 아닌 하나의 문자열로 인식하기 때문에 MY 가 출력 된다.

    세번째 줄은 MY TEST.TXT 파일 안에서 각 행의 첫번째 토큰을 출력해 준다.

     

    /L

    이 옵션은 단계적으로 증가, 감소하는 숫자 집합을 이용할 때 사용한다.

    for /l %a in (1, 1, 5) do start /watit imagex /export h:\sources\install.wim %a e:\intall.wim

     

    위 예제는 1부터 5까지 1씩 증가하는 인덱스를 순서대로 e:\install.wim 파일로 export 하는 예제이다.

    만약 (5, -1, 1) 을 사용하면 5부터 1까지 -1씩 감소 된다.

     

     

    SET

    SET 변수=문자열형태로 왼쪽에는 변수 이름 오른쪽에는 변수의 값을 대입한다.

     

    배치파일에서 변수를 호출할 때는 양쪽에 %를 붙여 호출한다.

     

    EX)

    set A=TEST

    echo %A%

      

    SET /A 변수=수식변수에 숫자를 할당할 때는 옵션 없이 할당하면 되지만 수식의 계산 결과를 할당하려면 /A 옵션을 사용해야 한다.

     

    EX) 

    set B=5

    set /a B=B+3

    echo %B%

     

    SET /PC언어의 scanf 함수와 동일하게 사용자의 입력을 받는 옵션이다.

     

    EX)

    @echo offset /p age=나이를 입력하세요 :

    echo 당신의 나이는 %age% 입니다.

    pause

    exit



    EX) 뒤에서 10개의 문자만 추출

    @echo off
    set test=당신의 나이는 20세 입니다.
    set test=%test:~-10%
    echo %test%

     

    위 예제의 결과는"는 20세 입니다."

     

     

    GOTO

    GOTO 뒤에 레이블을 적어주면 해당 레이블로 이동한다. 레이블은 클론으로 시작된다.<

     

    EX)

    @echo off
    set test=당신의 나이는 20세 입니다.
    set test=%test:~-10%
    echo %test%

    :menu
    cls
    echo.echo 1. 저는 남자입니다.
    echo 2. 저는 여자입니다.
    echo.
    set /p menu=번호를 선택해주세요 :
    if "%menu%"=="1" goto male
    if "%menu%"=="2" goto female
    goto menu

    :male
    cls
    echo.
    echo 당신은 남자입니다.
    echo.
    pause
    exit
    :female
    cls
    echo.
    echo 당신은 여자입니다.
    echo.
    pause
    exit

     

    위 예에서 set /p menu 값에 1을 입력하면 male 부분으로 이동하고 2를 입력하면 female 부분으로 이동한다.

    1 또는 2가 아닌 이 외의 값을 입력하면 menu 부분으로 다시 이동한다.

     

    ※ exit 대신 :EOF 를 사용하기도 한다. GOTO :EOF 로 exit와 같은 효과를 얻을 수 있다. :EOF 레이블을 만들어줄 필요는 없다.

     

     

     

     

    728x90
    반응형
상단으로