배치 스크립트 Part 6: Windows Batch Script - DOS 명령어와 자동화
개요
Windows 배치 스크립트(.bat 파일)는 Windows 환경에서 명령어를 자동화하는 강력한 도구입니다. 이 문서에서는 DOS 기본 명령어부터 배치 파일 작성, 제어문, 반복문, 함수, 그리고 취약점 진단 스크립트 작성까지 실무에서 필요한 모든 내용을 학습합니다.
주요 특징:
- Windows 명령어는 대소문자를 구분하지 않음
.bat또는.cmd확장자 사용- 메모장이나 텍스트 에디터로 작성 가능
1. Windows DOS 기본 명령어
1.1 도움말 및 시스템 정보
| 명령어 | 설명 | 예시 |
|---|---|---|
| help | Windows 명령 도움말 | help dir |
| 명령어 /? | 특정 명령어 도움말 | dir /? |
| systeminfo | 시스템 정보 표시 | systeminfo |
| msinfo32 | 시스템 정보 (GUI) | msinfo32 /report system.txt |
| hostname | 컴퓨터 이름 확인 | hostname |
| whoami | 현재 사용자 확인 | whoami |
| ver | Windows 버전 확인 | ver |
1.2 디렉토리 및 파일 관리
| 명령어 | 설명 | 예시 |
|---|---|---|
| dir | 디렉토리 목록 보기 | dir /s /b /a-d apple.txt |
| /s: 하위 디렉토리 검색 | ||
| /b: 간결한 형식으로 표시 | ||
| /a-d: 디렉토리가 아닌 파일만 표시 | ||
| cd | 디렉토리 이동 | cd /Windows |
cd /System32 |
||
| mkdir | 디렉토리 생성 | mkdir dir1 |
mkdir WabWc (하위 폴더 생성) |
||
| rmdir | 디렉토리 삭제 | rmdir C:Wbackup |
rmdir /s /q C:Wbackup |
||
| copy | 파일 복사 | copy a.txt C:Wbackup |
| con으로 바로 생성 | copy con a.txt |
|
| move | 파일/디렉토리 이동 | move a.txt /Users/a.txt |
| ren | 파일/디렉토리 이름 변경 | ren *.txt *.hwp |
ren dir1 dir2 |
||
| del | 파일 삭제 | del 파일명 |
del /s /q a.txt |
||
| erase | 파일 삭제 | erase a.txt |
| /F: 읽기 전용 파일 강제 삭제 | ||
| /S: 하위 디렉토리에서 삭제 | ||
| /Q: Quite 모드(삭제 확인 묻지 않음) | ||
| type | 텍스트 파일 내용 표시 | type nul > emp.txt |
1.3 네트워크 명령어
| 명령어 | 설명 | 예시 |
|---|---|---|
| ipconfig | IP 설정 확인 | ipconfig /all |
| ping | 네트워크 연결 테스트 | ping 8.8.8.8 |
| tracert | 경로 추적 | tracert www.google.com |
| netstat | 네트워크 연결 상태 | netstat -ano |
| nslookup | DNS 조회 | nslookup google.com |
| arp | ARP 테이블 확인 | arp -a |
1.4 시스템 관리
| 명령어 | 설명 | 예시 |
|---|---|---|
| date | 날짜 확인 및 수정 | date /T |
| time | 시간 확인 및 수정 | time /T |
echo %date%, echo %time% |
||
| where | 명령어 실행 경로 확인 | where python |
| path | 실행 파일 경로 표시 및 설정 | path |
| set | 환경변수 확인 및 설정 | set |
echo %COMPUTERNAME% |
||
echo %USERNAME% |
||
| timeout | 대기 시간 설정 | timeout 10 (10초 대기) |
| cls | 화면 지우기 | cls |
1.5 프로세스 관리
| 명령어 | 설명 | 예시 |
|---|---|---|
| tasklist | 실행 중인 프로세스 목록 | tasklist |
tasklist \| more |
||
| taskkill | 프로세스 종료 | taskkill /IM notepad.exe |
taskkill /F /IM "POWERPNT.EXE" |
||
taskkill /PID 1230 |
||
| start | 프로그램 실행 | start chrome |
start chrome www.naver.com |
||
| tree | 디렉토리 계층 구조 표시 | tree |
| exit | 명령 프롬프트 종료 | exit |
1.6 파일 검색
| 명령어 | 설명 | 예시 |
|---|---|---|
| find | 파일에서 문자열 찾기 | find "hello" c:Wtest.txt |
| /V: 지정한 문자열이 없는 줄 표시 | type test.txt \| find "hello" |
|
| /C: 지정한 문자열이 있는 줄의 수 표시 | ||
| /N: 지정한 문자열이 있는 줄 번호 표시 | ||
| /I: 대소문자 구분 안 함 | ||
| findstr | 여러 파일에서 문자열 찾기 | findstr "hello world" test.txt |
| /S: 현재 디렉토리와 하위 디렉토리 검색 | type test.txt \| findstr /I "hello" |
|
| /I: 대소문자 구분 안 함 |
2. 배치 파일 기본
2.1 배치 파일 생성
@echo off
echo Hello, World!
pause
저장:
- 파일명:
hello.bat - 인코딩: ANSI 또는 UTF-8
실행:
hello.bat
2.2 @echo off
@echo off
:: 실행 명령어를 화면에 표시하지 않음
@echo on
:: 실행 명령어를 화면에 표시
echo
:: 현재 echo 설정 상태 표시
echo.
:: 줄바꿈 (개행)
2.3 주석 (rem)
@echo off
rem 이것은 주석입니다
:: 이것도 주석입니다 (더 많이 사용됨)
echo 프로그램 시작
2.4 pause
@echo off
echo 첫 번째 작업 완료
pause
:: 사용자가 아무 키나 누를 때까지 대기
echo 두 번째 작업 시작
3. 변수
3.1 변수 선언 (SET)
@echo off
:: 변수 선언 (= 앞뒤로 띄어쓰기 하면 안됨)
SET var=1
SET name=itschool
:: 변수 사용
echo 변수 var = %var%
echo 변수 name = %name%
주의사항:
- 대소문자 구분하지 않음 (
SET var=1과SET VAR=1은 같음) =앞뒤로 공백이 없어야 함
3.2 지역 변수 (setlocal ~ endlocal)
@echo off
setlocal
SET local_var=로컬변수
SET global_var=전역변수
endlocal
echo local_var: %local_var%
:: 출력 안됨 (지역 변수이므로)
echo global_var: %global_var%
:: 출력됨
3.3 변수 제거
SET age=
:: 빈 값으로 설정하면 변수 제거
3.4 사용자 입력 (SET /P)
@echo off
SET /P name=이름을 입력하세요:
echo 안녕하세요, %name%님!
SET /P age=나이를 입력하세요:
echo 당신은 %age%살입니다.
pause
3.5 산술 연산 (SET /A)
@echo off
SET /A sum=10+5
echo 10 + 5 = %sum%
SET /A mul=10*5
echo 10 * 5 = %mul%
SET /A div=10/3
echo 10 / 3 = %div%
SET /A mod=10%%3
echo 10 %% 3 = %mod%
주의: %는 배치 파일에서 %%로 써야 함
4. 위치 매개변수
4.1 매개변수 사용
@echo off
:: setExam1.bat hello world
echo batch 파일 이름 = %0
echo first arg = %1
echo second arg = %2
echo third arg = %3
pause
실행:
C:\> setExam1.bat hello world
batch 파일 이름 = setExam1.bat
first arg = hello
second arg = world
third arg =
4.2 특수 매개변수
| 변수 | 의미 | 예시 |
|---|---|---|
| %0 | 배치 파일 이름 | setExam1.bat |
| %1 | 첫 번째 인자 | hello |
| %2 | 두 번째 인자 | world |
| %n | n번째 인자 | |
| %~d0 | 배치 파일이 있는 드라이브 | C: |
| %-p0 | 배치 파일이 있는 디렉토리 경로 | C:\magic\ |
| %~dp0 | 배치 파일이 있는 드라이브 및 디렉토리 | C:\magic\ |
예제:
@echo off
setlocal
echo batch 파일 이름 = %0
echo batch 파일의 드라이브 = %~d0
echo batch 파일의 디렉토리 = %~p0
pause
5. 환경 변수
5.1 시스템 환경 변수
| 변수 이름 | 경로 |
|---|---|
%AppData% |
c:\Users\username\Roaming |
%ComputerName% |
Hostname |
%HomePath% |
c:\Users\username |
%LocalAppData% |
c:\Users\username\AppData\Local |
%ProgramData% |
c:\ProgramData |
%ProgramFiles% |
c:\ProgramFiles |
%ProgramFiles(x86)% |
c:\ProgramFiles(x86) |
%SystemRoot% |
c:\Windows |
%Temp% |
c:\Users\username\AppData\Local\Temp |
%UserProfile% |
c:\Users\username |
%Windir% |
c:\Windows |
%SystemDrive% |
C: |
5.2 환경 변수 추가 (setx)
:: 환경변수 PATH에 경로 추가
setx PATH "%PATH%;C:\새로운경로" /m
:: /m 옵션: 시스템 환경 변수를 수정 (관리자 권한 필요)
5.3 종료 코드 (%ERRORLEVEL%)
@echo off
echo %ERRORLEVEL%
:: 직전 실행 명령어의 종료 코드 확인
ping 8.8.8.8 > nul 2>&1
if %ERRORLEVEL% EQU 0 (
echo 네트워크 연결 성공
) else (
echo 네트워크 연결 실패
)
종료 코드 의미:
| exit 값 | 의미 |
|---|---|
| 0 | 명령어가 성공적으로 종료 |
| 1 | 일반 에러 |
| 2 | Syntax error (문법 에러) |
| 9009 | 명령(파일)이 존재하지 않음 |
| -1073741510 | 인터럽트(Ctrl+c)로 중단했을 경우 |
6. 문자열 연산
6.1 문자열 자르기 (Slicing)
@echo off
setlocal
:: substring을 사용하여 원하는 부분의 문자열 추출
:: %변수명:~시작인덱스,길이%
SET var=Hello World!
:: 0부터 시작, 5개 문자
SET substr=%var:~0,5%
echo %substr%
:: 출력: Hello
:: 뒤에서부터 (-6은 뒤에서 6번째 문자부터)
SET substr=%var:~-6%
echo %substr%
:: 출력: World!
:: 뒤에서 6번째부터 2개 문자
SET substr=%var:~-6,2%
echo %substr%
6.2 문자열 치환 (Replace)
@echo off
setlocal
:: 입력된 값의 공백 제거
SET /P id=id를 입력하세요:
rem 입력된 ID의 값의 공백 제거
SET "id=%id: =%"
echo "id값은: %id%"
SET /P pw=pw를 입력하세요:
rem 입력된 PW의 값의 공백 제거
SET "pw=%pw: =%"
echo "pw값은: %pw%"
:: %변수:대체할문자=대체될문자%
:: 대체할 문자를 공백으로 비워두면 해당 변수에서 모든 공백 제거
if /I "%id%"=="apple" (
if /I "%pw%"=="love" (
echo 로그인 성공!!
) else (
echo 비밀번호를 다시 확인하세요!
)
) else (
echo id를 다시 확인하세요!
)
pause
7. IF 조건문
7.1 기본 IF 문
@echo off
SET /P num=숫자를 입력하세요:
if %num% EQU 10 (
echo 입력값은 10입니다
)
7.2 IF ~ ELSE
@echo off
SET /P num=숫자를 입력하세요:
if %num% EQU 10 (
echo 입력값은 10입니다
) else (
echo 입력값은 10이 아닙니다
)
7.3 숫자 비교 연산자
| 표현방식 | 의미 |
|---|---|
| EQU | 같다 (equal) |
| NEQ | 같지 않다 (not equal) |
| LSS | 보다 작다 (less) |
| LEQ | 작거나 같다 (less equal) |
| GTR | 보다 크다 (greater) |
| GEQ | 크거나 같다 (greater equal) |
@echo off
SET /P age=나이를 입력하세요:
if %age% GEQ 18 (
echo 성인입니다
) else (
echo 미성년자입니다
)
7.4 문자열 비교
@echo off
SET /P input=yes 또는 no를 입력하세요:
:: /I 옵션: 대소문자 구분 안함
if /I "%input%"=="yes" (
echo YES를 입력하셨습니다
) else if /I "%input%"=="no" (
echo NO를 입력하셨습니다
) else (
echo 잘못된 입력입니다
)
7.5 파일 존재 확인
@echo off
if exist C:\backup\test.txt (
echo 파일이 존재합니다
del C:\backup\test.txt
) else (
echo 파일이 존재하지 않습니다
)
7.6 NOT 연산자
@echo off
if not %1 == %2 goto process
:: %1과 %2가 같으면 종료
goto quit
:process
echo %1과 %2가 다릅니다
exit
:quit
echo 종료합니다
8. Label과 GOTO
8.1 Label 정의
@echo off
echo 프로그램 시작
:loop
echo 반복 실행
goto loop
:: 무한 루프
:end
echo 프로그램 종료
8.2 GOTO로 흐름 제어
@echo off
SET /P choice=계속하시겠습니까? (y/n):
if /I "%choice%"=="y" goto continue
if /I "%choice%"=="n" goto exit
:continue
echo 계속 진행합니다
goto end
:exit
echo 프로그램을 종료합니다
goto :eof
:end
pause
8.3 GOTO :eof
:eof는 배치 파일의 끝을 의미하는 특별한 label입니다.
@echo off
echo 시작
goto :eof
:: 스크립트 종료
echo 이 줄은 실행되지 않습니다
9. CHOICE 문
9.1 기본 사용법
@echo off
echo 어떤 작업을 수행하시겠습니까?
echo 1. 파일 열기
echo 2. 파일 저장
echo 3. 종료
choice /C 123 /M "선택(1,2,3)?"
:: %ERRORLEVEL%에 선택한 값이 저장됨
:: 1을 선택하면 ERRORLEVEL=1
:: 2를 선택하면 ERRORLEVEL=2
:: 3을 선택하면 ERRORLEVEL=3
if %ERRORLEVEL% EQU 1 goto Open
if %ERRORLEVEL% EQU 2 goto Save
if %ERRORLEVEL% EQU 3 goto Exit
:Open
echo 파일 열기
goto end
:Save
echo 파일 저장
goto end
:Exit
echo 프로그램 종료
goto :eof
:end
pause
9.2 CHOICE 옵션
| 옵션 | 설명 |
|---|---|
| /C 문자열 | 선택할 수 있는 목록 나열 (기본값: YN) |
| /N | 선택할 옵션을 표시하지 않음 |
| /M 메시지 | 사용자에게 선택할 옵션을 설명하는 메시지 표시 |
| /S | 대소문자 구분 |
choice /C ABCD /N /M "다음 중에서 하나를 선택하시오 A, B, C, D"
10. FOR 반복문
10.1 기본 FOR 문
@echo off
:: 배치 파일용: %%변수
:: DOS 창용: %변수
for %%g in (dir1 dir2) do mkdir %%g
:: dir1, dir2 디렉토리 생성
for %%g in (dir1 dir2) do rmdir %%g
:: dir1, dir2 디렉토리 삭제
10.2 FOR /L (숫자 반복)
@echo off
:: FOR /L %%변수 IN (begin, step, end) DO 명령
:: 1부터 10까지 출력
for /L %%i in (1, 1, 10) do (
echo %%i
)
:: 1부터 10까지 2씩 증가
for /L %%i in (1, 2, 10) do (
echo %%i
)
:: 출력: 1 3 5 7 9
10.3 FOR /R (재귀 탐색)
@echo off
:: 지정된 디렉토리 및 하위 디렉토리에서 파일 반복
for /R C:\backup %%g in (*.txt) do (
echo %%~nxg
)
:: C:\backup 및 하위 디렉토리의 모든 .txt 파일 출력
%%~nxg 의미:
%%g: 전체 경로~n: 파일명만~x: 확장자만~nxg: 파일명 + 확장자
10.4 FOR /D (디렉토리만)
@echo off
:: 디렉토리만 반복
for /D %%g in (*) do (
echo 디렉토리: %%g
)
10.5 FOR /F (파일 읽기)
@echo off
:: FOR /F ["옵션"] %%변수 IN (파일명) DO 명령
:: 파일 내용을 한 줄씩 읽기
for /F %%i in (test.txt) do (
echo %%i
)
:: 여러 파일 읽기
for /F %%i in (file1.txt file2.txt) do (
echo %%i
)
FOR /F 옵션:
| 옵션 | 설명 |
|---|---|
| delims=xxx | 구분자 (기본값: 공백) |
| skip=n | 파일 시작 부분에서 무시할 줄 수 |
| eol=; | 주석 문자 (기본값: ;) |
| tokens=x,y,m-n | 각 줄에서 읽을 항목 수 |
| usebackq | 따옴표 의미 변경 |
tokens 예제:
@echo off
:: test.txt: apple banana cherry
for /F "tokens=1-3" %%a in (test.txt) do (
echo 첫 번째: %%a
echo 두 번째: %%b
echo 세 번째: %%c
)
delims 예제:
@echo off
:: test.txt: apple,banana,cherry
for /F "delims=," %%a in (test.txt) do (
echo %%a
)
:: 출력: apple (첫 번째 항목만)
for /F "tokens=1-3 delims=," %%a in (test.txt) do (
echo %%a %%b %%c
)
:: 출력: apple banana cherry
10.6 setlocal enableDelayedExpansion
반복문 내에서 변수 값을 실시간으로 받으려면 !변수! 형식을 사용합니다.
@echo off
setlocal enableDelayedExpansion
:: 구구단 예제
SET /P dan=단수를 입력하세요:
for /L %%i in (1, 1, 9) do (
SET /A result=%dan% * %%i
echo %dan% x %%i = !result!
)
pause
11. CALL 명령어 (함수)
11.1 내부 함수 호출
@echo off
CALL :inside_func hello
CALL :inside_func world
echo 함수 모두 호출 완료
pause
goto :EOF
:inside_func
echo 매개변수: %1
exit /B
:: exit /B: 함수 종료 후 호출 지점으로 복귀
11.2 외부 배치 파일 호출
calling.bat:
@echo off
SET abc=Hello
echo abc = %abc%
CALL called.bat %abc%
echo abc = %abc%
pause
called.bat:
@echo off
echo "이 곳은 called.bat 파일내부!!"
SET abc=%1 World
echo.
pause
실행:
C:\> calling.bat
abc = Hello
"이 곳은 called.bat 파일내부!!"
abc = Hello World
12. 입출력 리디렉션
12.1 출력 리디렉션
@echo off
:: 표준 출력을 파일로
echo Hello World > output.txt
:: output.txt 파일 생성 (기존 내용 삭제)
echo New Line >> output.txt
:: output.txt 파일에 추가
:: 에러 출력 리디렉션
dir nonexist 2> error.txt
:: 에러 메시지를 error.txt로
:: 표준 출력과 에러를 함께
command > output.txt 2>&1
12.2 입력 리디렉션
@echo off
:: 파일 내용을 명령어 입력으로
sort < input.txt
:: 파일 내용을 다른 파일로
sort < input.txt > sorted.txt
12.3 NUL 디바이스
@echo off
:: 출력 숨기기
ping 8.8.8.8 > nul 2>&1
if %ERRORLEVEL% EQU 0 (
echo 네트워크 연결 성공
)
13. 실전 예제
예제 1: 시스템 정보 수집
@echo off
echo ================================
echo 시스템 정보 수집
echo ================================
echo.
echo [시스템 정보]
systeminfo | find "OS 이름"
systeminfo | find "시스템 종류"
echo.
echo [네트워크 정보]
ipconfig | find "IPv4"
echo.
echo [디스크 정보]
wmic logicaldisk get name,size,freespace
pause
예제 2: 파일 백업 스크립트
@echo off
setlocal
SET SOURCE=C:\Documents
SET DEST=D:\Backup
SET DATE=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%
echo 백업 시작: %SOURCE% -^> %DEST%
if not exist "%DEST%" mkdir "%DEST%"
xcopy "%SOURCE%" "%DEST%\Backup_%DATE%" /E /I /Y
if %ERRORLEVEL% EQU 0 (
echo 백업 성공!
) else (
echo 백업 실패!
)
pause
예제 3: Administrator 계정 점검
@echo off
echo [ 기 준 ]
echo 양호: Administrator Default 계정 이름을 변경하거나 강화된 비밀번호를 적용한 경우
echo 취약: Administrator Default 계정 이름을 변경하지 않거나 단순 비밀번호를 적용한 경우
echo.
echo [ 점 검 ]
net user Administrator > nul
echo.
echo [ 결 과 ]
net user Administrator | find /i "활성 계정" | find /i "예" > nul
if not errorlevel 1 echo 양호
if not errorlevel 1 echo 취약
pause
예제 4: 계정 잠금 임계값 점검
@echo off
echo [ 기 준 ]
echo 양호: 계정 잠금 임계값이 5 이하의 값으로 설정되어 있는 경우
echo 취약: 계정 잠금 임계값이 6 이상의 값으로 설정되어 있는 경우
echo.
echo [ 점 검 ]
net accounts | find /i "잠금 임계값"
echo.
echo [ 결 과 ]
net accounts | find /i "잠금 임계값" > threshold.txt
for /f "tokens=1-3" %%a in (threshold.txt) do set Threshold=%%c
if %Threshold% leq 5 echo 양호
if not %Threshold% leq 5 echo 취약
del threshold.txt
pause
예제 5: 관리자 그룹 최소화 점검
@echo off
echo [ 기 준 ]
echo 양호: Administrators 그룹의 구성원을 1명 이하로 유지하거나, 불필요한 관리자 계정이 존재하지 않는 경우
echo 취약: Administrators 그룹에 불필요한 관리자 계정이 존재하는 경우
echo.
echo [ 점 검 ]
echo "net localgroup administrators 명령 실행으로 관리자 계정 확인"
net localgroup administrators
echo.
echo [ 결 과 ]
echo 담당자와 인터뷰를 통해 불필요한 관리자 계정 존재 확인 필요!
pause
14. 고급 기법
14.1 배열 시뮬레이션
@echo off
setlocal
:: 배열처럼 사용하기
SET arr[0]=apple
SET arr[1]=banana
SET arr[2]=cherry
:: 접근
echo %arr[0]%
echo %arr[1]%
echo %arr[2]%
:: 반복문으로 출력
for /L %%i in (0,1,2) do (
call echo %%arr[%%i]%%
)
14.2 날짜/시간 포맷
@echo off
:: 날짜: YYYYMMDD
SET TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
echo %TODAY%
:: 시간: HHMMSS
SET NOW=%time:~0,2%%time:~3,2%%time:~6,2%
echo %NOW%
:: 조합
SET DATETIME=%TODAY%_%NOW%
echo %DATETIME%
14.3 색상 출력 (ANSI Escape Code)
@echo off
:: ANSI Escape Code 활성화 (Windows 10+)
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
:: 색상 코드
:: [31m: 빨간색
:: [32m: 녹색
:: [33m: 노란색
:: [0m: 리셋
echo [31m빨간색 텍스트[0m
echo [32m녹색 텍스트[0m
echo [33m노란색 텍스트[0m
주요 개념 요약
| 항목 | Linux Shell | Windows Batch |
|---|---|---|
| 확장자 | .sh |
.bat, .cmd |
| 셔뱅 | #!/bin/bash |
없음 |
| 주석 | # |
rem, :: |
| 변수 선언 | var=value |
SET var=value |
| 변수 사용 | $var, ${var} |
%var% |
| 사용자 입력 | read |
SET /P |
| 산술 연산 | $(( )) |
SET /A |
| 조건문 | if [ ]; then fi |
if ( ) else ( ) |
| 반복문 | for; do done |
for ( ) do ( ) |
| 함수 | func() { } |
:label, CALL :label |
| 배열 | arr=(1 2 3) |
시뮬레이션 필요 |
학습 포인트
1. Windows vs Linux
- 대소문자: Windows는 구분 안 함, Linux는 구분
- 경로 구분자: Windows는
\, Linux는/ - 환경 변수: Windows는
%VAR%, Linux는$VAR
2. 배치 파일 실무 팁
에러 처리:
@echo off
command
if %ERRORLEVEL% NEQ 0 (
echo 명령 실행 실패
exit /B 1
)
안전한 파일 삭제:
if exist "file.txt" (
del "file.txt"
)
관리자 권한 확인:
net session >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
echo 관리자 권한이 필요합니다
pause
exit /B 1
)
3. 디버깅
@echo off
:: 디버깅 모드
@echo on
:: 또는 각 단계마다 pause
command1
pause
command2
pause
마무리
Windows 배치 스크립트는 Windows 시스템 관리 및 자동화에 필수적인 도구입니다. Linux 쉘 스크립트에 비해 문법은 다소 제한적이지만, Windows 환경에서는 강력한 자동화 수단입니다.
실무에서는 시스템 점검, 백업 자동화, 로그 분석, 취약점 진단 등에 활용되며, PowerShell과 함께 사용하면 더욱 강력한 스크립트를 작성할 수 있습니다.
리눅스 쉘 스크립트와 윈도우 배치 스크립트를 모두 학습함으로써, 크로스 플랫폼 자동화 역량을 갖추게 되었습니다.
댓글 남기기