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 /?
반응형
댓글