본문 바로가기
Game DevTip/Windows

1. Windows 배치파일 제작 기본 문법 정리

by LIKE IT.라이킷 2025. 7. 12.

 

Windows 운영 체제에서 반복적이거나 자동화된 작업을 수행할 때 배치 파일(Batch File)은 매우 유용한 도구이다.

메모장에서 직접 배치 파일을 작성할 때 주로 사용되는 핵심 문법들을 정리하여 설명한다.

1. 기본 설정 및 정보 출력

  • @echo off
    • 이 명령어는 배치 파일이 실행될 때 각 명령어가 콘솔 화면에 표시되는 것을 방지한다. @ 기호는 echo off 명령어 자체도 숨기는 역할을 한다.
    • 사용 예:
    • @echo off echo 이 줄만 화면에 표시된다.
  • REM (Remark)
    • 주석을 나타내는 명령어이다. REM 뒤에 오는 텍스트는 실행되지 않으며, 스크립트의 설명을 위해 사용된다.
    • 사용 예:
    • REM 이것은 배치 파일의 주석이다. echo Hello
  • chcp [코드페이지]
    • 콘솔의 코드 페이지를 변경하는 명령어이다. 특히 한글과 같은 다국어 문자가 깨지는 현상을 방지하는 데 유용하다.
    • 65001은 UTF-8 코드 페이지를 의미한다.
    • > nul을 붙이면 이 명령어의 출력 메시지(예: "활성 코드 페이지: 65001")를 화면에 표시하지 않고 숨긴다.
    • 사용 예:
    • chcp 65001 > nul echo 한글 테스트를 진행한다.
  • title [창 제목]
    • 명령 프롬프트 창의 제목을 설정한다.
    • 사용 예:
    • title 나의 첫 배치 파일 echo 창 제목이 성공적으로 변경되었다.
  • echo [텍스트]
    • 지정된 텍스트를 콘솔에 출력하는 명령어이다.
    • echo.는 빈 줄을 출력한다.
    • 사용 예:
    • echo. echo 환영한다! echo ====================

2. 변수 및 환경 설정

  • set "변수명=값"
    • 환경 변수를 설정하는 명령어이다. 설정된 변수는 %변수명% 형식으로 참조할 수 있다.
    • 값에 공백이 포함될 경우 큰따옴표로 묶는 것이 안전한 방법이다.
    • 사용 예:
    • set "MY_DIRECTORY=C:\\Users\\Documents" echo 설정된 디렉토리: %MY_DIRECTORY%
  • set /P [변수명]="프롬프트 메시지"
    • 사용자로부터 입력을 받아 지정된 변수에 저장한다.
    • 사용 예:
    • set /P USER_INPUT="무엇을 도와줄까? " echo 사용자 입력: %USER_INPUT%

3. 흐름 제어 (조건, 반복, 이동)

  • if [조건] (명령어) 또는 if [조건] (명령어) else (명령어)
    • 특정 조건에 따라 명령어를 실행하거나 다른 명령어를 실행하도록 제어한다.
    • 주요 조건:
      • exist [파일/디렉토리]: 지정된 파일 또는 디렉토리가 존재하는지 확인한다.
      • %errorlevel% neq 0: 바로 직전에 실행된 명령어가 실패했는지 확인한다 (0은 성공, 0이 아니면 실패를 의미한다).
      • ==: 두 값이 같은지 문자열로 비교한다.
      • EQU, NEQ, LSS, LEQ, GTR, GEQ: 각각 같다, 같지 않다, 작다, 작거나 같다, 크다, 크거나 같다는 의미로 숫자를 비교할 때 사용된다.
    • 사용 예:
    • if exist "C:\\Program Files" ( echo "Program Files" 디렉토리가 존재한다. ) else ( echo "Program Files" 디렉토리가 없다. ) REM 이전 명령어가 실패했을 경우 some_command_that_might_fail if %errorlevel% neq 0 ( echo 명령 실행 중 오류가 발생했다. )
  • FOR 루프
    • 파일 목록, 디렉토리 목록, 또는 숫자 범위에 대해 반복적인 작업을 수행할 때 사용된다.
    • 배치 파일 내에서는 루프 변수 앞에 %%를 두 번 붙여 사용한다 (예: %%f).
    • /L: 숫자 범위에 대한 루프를 지정하며, (시작,증가,끝) 형식으로 사용한다.
    • /D: 디렉토리에 대해서만 루프를 지정한다.
    • 사용 예:
    • REM 현재 디렉토리의 모든 .log 파일 이름을 출력한다. FOR %%f IN (*.log) DO ( echo 로그 파일: %%f ) REM 1부터 5까지의 숫자를 출력한다. FOR /L %%i IN (1,1,5) DO ( echo 숫자: %%i )
  • GOTO :레이블명
    • 스크립트의 실행 흐름을 배치 파일 내의 특정 레이블(:레이블명)로 이동시킨다.
    • 사용 예:
    • echo 첫 번째 섹션이다. GOTO :EndOfScript echo 이 줄은 실행되지 않는다. :EndOfScript echo 스크립트가 여기로 점프했다.
  • CALL [다른 배치 파일]
    • 현재 배치 파일 내에서 다른 배치 파일을 호출하고, 호출된 배치 파일의 실행이 완료되면 다시 원래 배치 파일로 돌아와 다음 명령어를 실행한다.
    • 사용 예:
    • echo 메인 스크립트가 시작된다. CALL sub_process.bat echo 메인 스크립트가 계속된다.

4. 파일 및 디렉토리 조작

  • cd [경로]
    • 현재 작업 디렉토리를 변경한다.
    • /d 옵션은 드라이브 문자가 변경되더라도 해당 디렉토리로 이동할 수 있도록 한다.
    • 사용 예:
    • cd C:\\Users\\Public\\Documents cd /d D:\\Backup
  • DEL [파일 경로]
    • 지정된 파일(들)을 삭제한다.
    • /Q: 확인 메시지 없이 조용히 삭제한다.
    • /F: 읽기 전용 파일도 강제로 삭제한다.
    • 사용 예:
    • DEL temp_data.tmp DEL /Q *.bak
  • MD [디렉토리명] 또는 MKDIR [디렉토리명]
    • 새로운 디렉토리를 생성한다.
    • 사용 예:
    • MD new_project_folder MD "My Documents Archive"
  • RD [디렉토리명] 또는 RMDIR [디렉토리명]
    • 디렉토리를 삭제한다.
    • /S: 디렉토리와 그 안의 모든 하위 디렉토리 및 파일을 함께 삭제한다. (내용물이 있는 디렉토리 삭제 시 필수)
    • /Q: 확인 메시지 없이 조용히 삭제한다.
    • 사용 예:
    • RD empty_logs RD /S /Q old_backup_data
  • REN [기존 이름] [새 이름] 또는 RENAME [기존 이름] [새 이름]
    • 파일이나 디렉토리의 이름을 변경한다.
    • 사용 예:
    • REN report_v1.docx report_final.docx REN temp_folder_old temp_folder_new
  • MOVE [원본 경로] [대상 경로]
    • 파일이나 디렉토리를 지정된 대상으로 이동하거나, 같은 위치에서 이름을 변경한다.
    • 사용 예:
    • MOVE source_file.txt C:\\Destination\\source_file.txt MOVE old_name.txt new_name.txt

5. 출력 리디렉션 및 파이프

  • > (리디렉션)
    • 명령어의 표준 출력을 파일로 보낸다. 대상 파일이 이미 존재하면 내용을 덮어쓴다.
    • 사용 예:
    • dir > directory_contents.txt
  • >> (추가 리디렉션)
    • 명령어의 표준 출력을 파일 끝에 추가한다. 대상 파일이 없으면 새로 생성한다.
    • 사용 예:
    • echo 새로운 로그 메시지 >> application_log.txt
  • < (입력 리디렉션)
    • 파일의 내용을 명령어의 표준 입력으로 사용한다. (자주 사용되지는 않는 문법이다.)
    • 사용 예:
    • sort < unsorted_numbers.txt
  • | (파이프)
    • 하나의 명령어 출력을 다른 명령어의 입력으로 전달한다.
    • 사용 예:
    • dir | findstr "document" REM 'dir' 명령어 결과에서 "document" 문자열이 포함된 줄만 찾는다.

6. 시스템 및 기타 유틸리티

  • pause
    • 명령 프롬프트를 일시 정지하고 사용자에게 아무 키나 누르도록 메시지를 표시한다. 스크립트 실행 후 창이 바로 닫히는 것을 방지하여 결과를 확인할 시간을 제공한다.
    • 사용 예:
    • echo 모든 작업이 완료되었다. pause
  • exit /b [종료 코드]
    • 현재 배치 파일을 종료한다. /b 옵션은 현재 스크립트만 종료하고, 만약 이 스크립트를 호출한 다른 스크립트가 있다면 그 스크립트는 계속 실행된다. [종료 코드]는 일반적으로 성공(0) 또는 오류(1 등)를 나타낸다.
    • 사용 예:
    • if not exist "data.csv" ( echo 오류: data.csv 파일을 찾을 수 없다. exit /b 1 )
  • start "[창 제목]" "[실행 파일/URL]" [인수]
    • 새로운 명령 프롬프트 창, 애플리케이션, 또는 웹 브라우저를 시작한다.
    • cmd /k "명령어"를 함께 사용하여 새 CMD 창에서 특정 명령어를 실행하고 창을 유지할 수 있다.
    • 사용 예:
    • start notepad.exe my_notes.txt start "Google 검색" "<https://www.google.com>" start "새 콘솔 창" cmd /k "dir C:\\"
  • timeout /t [초] >nul
    • 지정된 시간(초) 동안 명령 프롬프트를 일시 정지한다.
    • >nul을 붙여 카운트다운 메시지를 숨길 수 있다.
    • 사용 예:
    • echo 10초 후에 다음 단계로 진행한다... timeout /t 10 >nul echo 다음 단계가 시작되었다!
  • CLS
    • 명령 프롬프트 화면의 모든 내용을 지운다.
    • 사용 예:
    • CLS echo 화면이 깨끗하게 지워졌다.
  • TASKKILL /IM [프로세스 이름] /F
    • 실행 중인 프로세스를 종료한다.
    • /IM: 이미지 이름(프로세스 이름)으로 지정한다.
    • /PID: 프로세스 ID로 지정한다.
    • /F: 프로세스를 강제로 종료한다.
    • 사용 예:
    • TASKKILL /IM excel.exe /F
  • DATE / TIME / VER
    • 시스템의 현재 날짜, 시간 또는 Windows 운영 체제의 버전을 표시한다.
    • %DATE%와 %TIME%은 스크립트 내에서 현재 날짜와 시간을 나타내는 내장 변수로도 활용된다.
    • 사용 예:
    • echo 현재 날짜는 %DATE% 이다. VER
  • IPCONFIG / PING
    • 네트워크 관련 정보를 확인하거나 다른 네트워크 장치와의 연결을 테스트한다.
    • 사용 예:
    • IPCONFIG /all PING google.com

추가 팁: 명령어 도움말 확인

각 명령어 뒤에 /?를 붙여 실행하면 해당 명령어의 모든 옵션과 자세한 사용법을 명령 프롬프트에서 직접 확인할 수 있다.

예시: FOR /? 또는 IF /?

 

반응형

댓글