Windows 명령 프롬프트(Command Prompt, CMD)는 Windows에 들어 있는 CLI다. 마우스 대신 글자로 명령을 쳐서 파일과 폴더를 다루고, 시스템 정보를 보고, 네트워크 설정을 확인한다. 이 글은 자주 쓰는 CMD 명령을 묶음별로 정리한 참고표다.


CMD 창은 cmd.exe를 실행해서 연다

CMD의 실행 파일은 C:\Windows\System32\cmd.exe다. 이 파일을 실행하면 검은 창이 뜨고, 그 창에 아래 명령들을 친다. PowerShell 창에서 cmd라고 쳐도 그 창 안에서 CMD가 열린다. PowerShell은 CMD와 다른 셸이라서 같은 명령도 문법이 다를 수 있다. 이 글의 명령은 모두 CMD 기준이다.

일부 명령(chkdsk 같은 것)은 관리자 권한으로 연 CMD 창에서만 돈다. 관리자 창은 cmd.exe를 「관리자 권한으로 실행」해서 연다.

이 글에서 「디렉토리」와 「폴더」는 같은 것을 가리킨다.


명령 한 줄은 이름, 옵션, 대상으로 읽는다

표를 읽기 전에 CMD 명령 한 줄이 어떻게 생겼는지부터 본다. 이걸 모르면 dir /s /b 같은 줄이 암호처럼 보인다.

dir /s C:\Users
  • dir — 명령 이름이다
  • /s — 옵션이다. 명령 뒤에 /글자를 붙여 동작을 바꾼다. 무슨 글자가 무슨 뜻인지는 명령마다 다르다. 여기서 /s는 「하위 폴더까지 포함」이다
  • C:\Users — 대상 경로다. C:는 C 드라이브, \는 폴더 사이의 구분자다

몇 가지 기호를 더 알아 두면 아래 예제가 다 읽힌다.

기호 뜻 예
/? 그 명령의 도움말을 본다 dir /?
* 「아무 글자나 몇 개든」. 파일 이름을 뭉뚱그려 고른다(글로브) *.txt = 이름이 무엇이든 .txt로 끝나는 파일
> 결과를 화면 대신 파일에 쓴다. 파일이 있으면 덮어쓴다(리다이렉트) dir > output.txt
>> 결과를 파일 끝에 이어 붙인다 echo World >> greeting.txt
\| 앞 명령의 결과를 뒤 명령의 입력으로 넘긴다(파이프) tasklist \| findstr notepad = 프로세스 목록(tasklist)에서 notepad가 든 줄만 고른다(findstr). 두 명령은 아래에서 다시 나온다
& 한 줄에 명령 두 개를 차례로 실행한다 echo a & echo b
\|\| 앞 명령이 실패했을 때만 뒤 명령을 실행한다. 오류가 났을 때뿐 아니라 findstr이 찾는 글자를 못 찾았을 때도 실패로 친다 findstr x a.txt \|\| echo 없음
( ) 여러 명령을 한 덩어리로 묶는다. 묶은 덩어리의 결과를 한꺼번에 >로 보낼 수 있다 (echo a & echo b) > f.txt
REM 그 줄은 주석이다. 실행하지 않는다 REM 백업

옵션이 -로 시작하는 명령도 있다. netstat -ano, arp -a, ping -n 4가 그렇다. 어느 쪽인지는 명령마다 정해져 있어서, 헷갈리면 /?로 도움말을 본다.

#은 CMD에서 주석이 아니다. CMD 창에 # 안녕을 치면 '#' is not recognized as an internal or external command가 뜬다(이 PC에서 확인했다). 그래서 이 글의 예제는 설명 줄을 REM으로 적었다. 설명 줄은 치지 않아도 된다.


파일과 폴더를 다루는 명령

명령어 설명 예제
dir 현재 폴더의 파일과 폴더 목록 표시 dir / dir /s (하위 폴더 포함)
cd [경로] 폴더 이동. 경로 없이 치면 지금 있는 폴더를 보여 준다 cd C:\Users / cd .. (한 칸 위 폴더)
mkdir [폴더명] 새 폴더 생성 mkdir NewFolder / mkdir C:\Users\NewFolder
rmdir [폴더명] 빈 폴더 삭제 rmdir OldFolder / rmdir /s /q Folder (/s 안의 내용까지, /q 묻지 않고)
del [파일명] 파일 삭제 del file.txt / del *.txt (모든 txt 파일)
copy [원본] [대상] 파일 복사 copy source.txt destination.txt
move [원본] [대상] 파일 이동 또는 이름 변경 move oldname.txt newname.txt
ren [기존명] [새이름] 파일 이름 변경. rename이라고 써도 같다 ren oldname.txt newname.txt
attrib [옵션] [파일] 파일 속성 변경 attrib +r file.txt (읽기 전용 켜기) / attrib -h file.txt (숨김 끄기)
tree [경로] 폴더 구조를 나무 모양으로 표시 tree / tree C:\Users / tree /f (파일 이름도 표시)

파일 속성은 파일에 붙은 표시다. r은 읽기 전용(고칠 수 없음), h는 숨김(평소 목록에 안 보임)이다. attrib에서 +는 그 속성을 켜고 -는 끈다.

파일을 새로 만드는 명령

CMD에는 「빈 파일 만들기」 전용 명령이 없다. 그래서 글자를 출력하는 명령의 결과를 >로 파일에 쓰는 방식으로 만든다.

명령어 설명 예제
type nul > [파일명] 빈 파일 생성 type nul > newfile.txt
echo. > [파일명] 빈 줄 하나가 든 파일 생성 echo. > newfile.txt
echo [내용] > [파일명] 지정한 내용으로 파일 생성 echo Hello > greeting.txt
echo [내용] >> [파일명] 파일에 내용 추가 (기존 내용 유지) echo World >> greeting.txt
(echo line1 & echo line2) > [파일명] 여러 줄의 내용으로 파일 생성 (echo line1 & echo line2) > file.txt
  • type은 파일 내용을 화면에 찍는 명령이다. nul은 「아무것도 없는 곳」이라서 type nul은 아무것도 찍지 않는다. 그 「아무것도 없음」을 >로 파일에 쓰니 빈 파일이 생긴다
  • echo는 뒤에 적은 글자를 그대로 화면에 찍는다. echo.처럼 점을 바로 붙이면 빈 줄 하나를 찍는다
  • (echo line1 & echo line2)는 두 echo를 괄호로 묶어, 두 줄을 한꺼번에 파일로 보낸다

파일 명령을 이어서 써 보는 예제

REM 현재 폴더의 파일 목록 확인
dir

REM 현재 폴더와 하위 폴더의 모든 파일을 경로만 한 줄씩 표시 (크기·날짜 없이)
dir /s /b

REM 새 폴더 생성
mkdir MyFolder

REM 빈 파일 생성
type nul > newfile.txt

REM 특정 내용의 파일 생성
echo Hello World > greeting.txt

REM 파일에 내용 추가
echo Goodbye World >> greeting.txt

REM 여러 줄의 내용으로 파일 생성
(echo Line 1) > multiline.txt
(echo Line 2 & echo Line 3) >> multiline.txt

REM 파일 복사
copy C:\source\file.txt C:\destination\file.txt

REM 여러 파일 한 번에 삭제
del C:\temp\*.log

REM 파일 이름 변경 (ren 또는 rename)
ren oldfile.txt newfile.txt

REM 읽기 전용 속성 설정
attrib +r important.txt

REM 디렉토리 구조를 파일로 저장
tree C:\ /f > directory_tree.txt

위에서부터 따라간다.

  • dir /s /b — /s는 하위 폴더까지, /b는 군더더기 없이 이름만이다. 크기·날짜 같은 상세 정보는 빠지고 파일 경로가 한 줄에 하나씩 나온다
  • echo Hello World > greeting.txt 다음 echo Goodbye World >> greeting.txt — 첫 줄이 파일을 만들고, 둘째 줄이 그 끝에 한 줄을 붙인다. 결과는 두 줄짜리 파일이다
  • (echo Line 1) > multiline.txt — 명령이 하나뿐이라 괄호는 없어도 된다. 아래 줄과 모양을 맞추려고 묶었을 뿐이다. 다음 줄은 Line 2와 Line 3을 한꺼번에 이어 붙인다. 결과는 세 줄이다
  • del C:\temp\*.log — C:\temp 폴더 안에서 .log로 끝나는 파일을 전부 지운다
  • tree C:\ /f > directory_tree.txt — C 드라이브 맨 위(C:\)부터 폴더 구조를 파일 이름까지(/f) 그려서, 화면 대신 directory_tree.txt에 쓴다. 드라이브 전체라 오래 걸린다

시스템 정보를 보고 관리하는 명령

프로세스는 지금 돌고 있는 프로그램 하나이고, 프로세스마다 번호(PID)가 붙는다. PID는 tasklist 결과의 두 번째 칸에서 볼 수 있다.

명령어 설명 예제
systeminfo 시스템의 상세 정보 표시 systeminfo
tasklist 현재 실행 중인 프로세스 목록 표시 tasklist / tasklist /v (상세 정보)
taskkill /PID [ID] 지정한 PID의 프로세스 종료 taskkill /PID 1234 / taskkill /IM notepad.exe /F (이름으로 찾아 강제 종료)
ipconfig 네트워크 설정 정보 표시 ipconfig / ipconfig /all (전체 정보)
ping [호스트] 그 컴퓨터까지 연결되는지 확인 ping google.com / ping 8.8.8.8
netstat 네트워크 연결(TCP 연결처럼 두 프로그램이 주고받는 통로)과 포트 사용 현황 표시 netstat / netstat -ano (PID 포함)
chkdsk [드라이브]: /f 디스크 오류 검사 및 수정 chkdsk C: /f
sfc /scannow Windows가 보호하는 시스템 파일을 전부 검사하고, 잘못 바뀐 파일을 올바른 판으로 복구 sfc /scannow (관리자 권한 필요)
shutdown /s /t [초] 지정한 시간 후 컴퓨터 종료 shutdown /s /t 3600 (1시간 후) / shutdown /a (예약 취소)
ver Windows 버전 정보 표시 ver
cls 명령 프롬프트 화면 지우기 cls

표에 처음 나오는 말을 짚는다.

  • taskkill은 프로세스를 PID(/PID)로 고를 수도 있고 실행 파일 이름(/IM)으로 고를 수도 있다. PID는 먼저 tasklist로 찾아야 하고, 이름은 알고 있으면 바로 칠 수 있다. /F는 강제로 끈다
  • ipconfig는 이 컴퓨터의 IP 주소 같은 네트워크 설정을 보여 준다
  • ping의 호스트는 네트워크에 연결된 컴퓨터 한 대다. google.com 같은 도메인을 써도 되고, 8.8.8.8 같은 IP 주소를 바로 써도 된다
  • netstat -ano — -a는 모든 연결과 기다리는 포트, -n은 주소와 포트를 숫자로(안 붙이면 주소 자리에 컴퓨터 이름이 나온다), -o는 그 연결을 가진 프로세스의 PID를 보여 준다
  • chkdsk의 /f는 찾은 오류를 고친다
  • shutdown의 /s는 종료, /t는 몇 초 뒤에 할지, /a는 예약된 종료를 취소(abort)한다

시스템 관리 명령을 이어서 써 보는 예제

REM 시스템 정보 확인
systeminfo

REM 현재 실행 중인 프로세스 목록 조회 (상세 정보 포함)
tasklist /v

REM 특정 프로세스 강제 종료
taskkill /IM notepad.exe /F

REM 특정 포트를 사용 중인 프로세스 확인
netstat -ano | findstr :8080

REM 네트워크 구성 확인
ipconfig /all

REM 특정 호스트에 대한 연결 확인
ping google.com

REM 디스크 오류 검사 및 수정 예약
chkdsk C: /f /R

REM 시스템 파일 검사 및 복구 (관리자 권한 필요)
sfc /scannow

REM 1시간 후 컴퓨터 종료
shutdown /s /t 3600

REM 예정된 종료 취소
shutdown /a

REM 컴퓨터 재부팅 (30초 후)
shutdown /r /t 30 /c "정기 유지보수"

REM 현재 Windows 버전 확인
ver

REM 명령 프롬프트 화면 지우기
cls
  • netstat -ano | findstr :8080 — netstat -ano가 연결 목록을 찍고, |가 그 목록을 findstr에 넘긴다. findstr은 글자가 든 줄만 골라 주는 명령이다. 그래서 :8080(8080번 포트)이 든 줄만 남는다. 그 줄 맨 끝 칸이 PID다
  • chkdsk C: /f /R — /R은 디스크에서 망가진 구역을 찾아 읽을 수 있는 내용을 살린다. /f도 같이 한다. C 드라이브는 Windows가 지금 쓰고 있어서 바로 고치지 못하고, 원래 이 글은 「다음 부팅 때 실행을 예약한다」고 적었다. 나는 관리자 창에서 직접 돌려 그 메시지를 확인하지는 않았다. 바로 검사하는지 예약만 하는지는 관리자 창에서 쳤을 때 화면에 뜨는 안내로 확인한다
  • shutdown /r /t 30 /c "정기 유지보수" — /r은 재시작, /c는 왜 끄는지 적는 설명 문구다

네트워크를 다루는 명령

명령어 설명 예제
net use [드라이브]: \\[서버]\[폴더] 네트워크 드라이브 연결 net use Z: \\192.168.1.100\Share
net share [이름]=[경로] 내 폴더를 네트워크의 다른 컴퓨터가 볼 수 있게 공유 net share MyShare=C:\SharedFolder
tracert [호스트] 목적지까지 거치는 라우터를 차례로 표시 tracert google.com
nslookup [도메인] 도메인 이름의 IP 주소 조회 nslookup google.com
arp -a ARP 캐시 테이블 표시 arp -a / arp -d (캐시 삭제)
ipconfig /release DHCP로 받은 IP 설정 반납 ipconfig /release
ipconfig /renew DHCP로 IP 설정을 새로 받음 ipconfig /renew
net stop [서비스명] 서비스 중지 net stop "Windows Update"
net start [서비스명] 서비스 시작 net start "Windows Update"
  • 네트워크 드라이브는 다른 컴퓨터(서버)가 공유한 폴더를 내 컴퓨터의 Z: 같은 드라이브 글자로 붙인 것이다. \\192.168.1.100\Share는 「192.168.1.100 컴퓨터의 Share라는 공유 폴더」라는 뜻의 경로다. \\로 시작하면 다른 컴퓨터의 경로다
  • tracert는 traceroute의 Windows 판이다. 「경로 추적」은 내 컴퓨터에서 목적지까지 패킷이 거쳐 가는 라우터를 차례로 찍는 일이다
  • nslookup은 DNS에게 「이 도메인의 IP가 뭐냐」고 묻는다
  • ARP는 같은 네트워크 안에서 IP 주소를 MAC 주소로 바꾸는 규약이고, ARP 캐시 테이블은 한 번 알아낸 그 짝을 적어 둔 표다(캐시)
  • DHCP는 IP 주소 같은 설정을 자동으로 받아 오는 규약이다. /release는 받은 설정을 돌려주고 /renew는 다시 받는다
  • 여기서 서비스는 Windows 서비스다. 화면 없이 뒤에서 도는 프로그램이다

네트워크 명령을 이어서 써 보는 예제

REM 네트워크 드라이브 연결
net use Z: \\192.168.1.100\Share /user:username password

REM 특정 폴더를 네트워크에 공유
net share MyShare=C:\MyFolder /grant:Everyone,FULL

REM 네트워크 공유 목록 확인
net share

REM 네트워크 드라이브 연결 해제
net use Z: /delete

REM 도메인 이름의 IP 주소 조회
nslookup google.com

REM 특정 DNS 서버를 통한 도메인 조회
nslookup google.com 8.8.8.8

REM 네트워크 경로 추적
tracert google.com

REM ARP 캐시 테이블 확인
arp -a

REM ARP 캐시 항목 추가
arp -s 192.168.1.100 00-aa-bb-cc-dd-ee

REM DHCP에서 IP 주소 갱신
ipconfig /release
ipconfig /renew

REM DNS 캐시 초기화
ipconfig /flushdns

REM 서비스 시작
net start "Windows Update"

REM 서비스 중지
net stop "Windows Update"
  • /user:username password — 공유 폴더를 가진 상대 컴퓨터에 접속할 때 쓸 사용자 이름과 비밀번호다
  • /grant:Everyone,FULL — 모든 사용자(Everyone)에게 이 공유의 전체 권한(FULL)을 준다. 고를 수 있는 권한은 READ · CHANGE · FULL 셋이다
  • nslookup google.com 8.8.8.8 — 뒤에 붙인 8.8.8.8이 「이 DNS 서버에게 물어라」는 뜻이다. 안 붙이면 이 컴퓨터에 설정된 DNS 서버에게 묻는다
  • arp -s 192.168.1.100 00-aa-bb-cc-dd-ee — 00-aa-bb-cc-dd-ee는 MAC 주소다. 「192.168.1.100은 이 MAC 주소다」라는 짝을 손으로 표에 넣는다. 두 값 모두 예시로 지어낸 값이다
  • ipconfig /flushdns — Windows는 한 번 물어본 도메인의 IP를 DNS 캐시에 적어 둔다. 이 명령은 그 캐시를 비운다. Microsoft 문서는 DNS 이름 풀이가 이상할 때 쓰라고 적는다

여러 명령을 엮어 쓰는 고급 패턴

파일을 찾고 처리한다

REM 특정 파일명 검색
dir /s /b *.txt

REM 파일 내용에서 특정 문자열 검색
findstr "keyword" C:\Folder\*.txt

REM 특정 확장자 모든 파일 삭제
del /s /q C:\Folder\*.tmp

REM 폴더의 크기 확인
dir /s C:\Folder | find "File(s)"
  • dir /s /b *.txt — 지금 폴더와 하위 폴더에서 .txt로 끝나는 파일의 경로만 찍는다
  • findstr "keyword" C:\Folder\*.txt — C:\Folder의 txt 파일들을 열어 keyword가 든 줄을 찾는다
  • del /s /q C:\Folder\*.tmp — /s로 하위 폴더까지, /q로 묻지 않고 .tmp 파일을 지운다
  • dir /s C:\Folder | find "File(s)" — dir /s는 폴더마다 끝에 5 File(s) 18,728 bytes처럼 파일 개수와 합계 크기를 찍는다. find도 findstr처럼 글자가 든 줄만 고르는 명령인데, 주어진 글자를 그대로만 찾는다. 그래서 File(s)가 든 줄만 남고, 맨 마지막 줄이 하위 폴더까지 합친 전체 크기다. 이 출력은 영어판 Windows인 이 PC에서 확인했다. 한국어판 Windows에서 같은 글자가 찍히는지는 확인하지 않았다

프로세스를 관리한다

REM 특정 프로세스의 메모리 사용량 확인
tasklist /v | findstr notepad

REM 포트를 사용 중인 프로세스 찾기
netstat -ano | findstr :8080

REM 메모장이 안 떠 있으면 띄우기
tasklist | findstr notepad || (start notepad.exe)
  • tasklist /v | findstr notepad — 프로세스 목록에서 notepad가 든 줄만 남긴다. tasklist 결과의 Mem Usage 칸이 메모리 사용량이다
  • tasklist | findstr notepad || (start notepad.exe) — findstr이 notepad를 못 찾으면 실패로 끝나고, 그러면 || 뒤가 실행된다. start는 프로그램을 새로 띄우는 명령이다. 즉 메모장이 이미 떠 있으면 아무것도 안 하고, 없으면 띄운다

파일 내용을 만들어 넣는다

이 묶음은 CMD 창에 직접 치는 예제다.

REM 빈 파일 생성
type nul > empty.txt

REM 기본 설정 파일 생성
echo [DEFAULT] > config.ini
echo timeout=30 >> config.ini

REM 배치 파일 생성 (한 줄로 친다)
(echo @echo off & echo setlocal enabledelayedexpansion & echo for /r %%f in (*.log^) do del "%%f" & echo echo cleanup done) > cleanup.bat

REM 만든 배치 파일 실행
.\cleanup.bat

REM CSV 파일 생성
echo Name,Age,Email > data.csv
echo John,25,john@example.com >> data.csv
echo Jane,30,jane@example.com >> data.csv

REM 여러 파일 한 번에 생성
for /L %i in (1,1,5) do type nul > file%i.txt
  • config.ini — .ini는 설정을 한 줄에 하나씩 「이름=값」으로 적는 글자 파일이다. [DEFAULT] 같은 대괄호 줄은 그 아래 설정들을 묶는 이름(섹션)이다. 결과 파일은 [DEFAULT]와 timeout=30 두 줄이다
  • 배치 파일 생성 — 배치 파일은 CMD 명령을 줄마다 적어 둔 .bat 파일이다. 여기서는 괄호 안의 echo 네 개가 찍는 글자를 &로 이어 통째로 cleanup.bat에 쓴다. 각 echo가 찍는 것이 만들어질 배치 파일의 한 줄이다. 그래서 cleanup.bat은 네 줄짜리 파일이 된다
    • @echo off — echo off는 배치 파일이 돌 때 실행하는 명령 자체를 화면에 찍지 않게 한다. 다만 echo off 줄 자신은 찍힌다. 맨 앞의 @는 그 줄 하나를 찍지 않게 해서, @echo off로 쓰면 그 줄까지 안 보인다(이 PC에서 echo off와 @echo off 두 파일을 돌려 비교했다)
    • setlocal enabledelayedexpansion — 그 배치 파일 안에서 바꾼 환경변수가 밖으로 새지 않게 하고, 변수를 늦게 펼치는(delayed expansion) 기능을 켠다. 이 예제는 환경변수를 바꾸지 않아서, 이 줄을 뺀 파일도 똑같이 .log 파일을 지웠다(이 PC에서 확인했다)
    • for /r %%f in (*.log) do del "%%f" — 지금 폴더부터 하위 폴더를 전부 돌면서(/r) .log 파일을 하나씩 %%f에 담아 지운다. 배치 파일 안에서는 변수를 %%f처럼 %를 두 번 써서 적는다. "%%f"를 큰따옴표로 감싼 것은 이름에 빈칸이 든 파일 때문이다. 따옴표 없이 a b.log를 지우게 하면 a와 b.log 두 파일로 나뉘어 Could Not Find가 뜨고 안 지워졌다(이 PC에서 확인했다)
    • 창에 치는 줄인데 %%f인 이유 — CMD 창에서는 %%f가 바뀌지 않고 글자 그대로 파일에 적힌다. 만들어진 cleanup.bat을 열어 보면 %%f가 그대로 있다. 배치 파일 안에서는 %%f를 써야 하므로 이게 맞다. 아래 for /L 줄은 창에서 바로 실행하는 반복이라 %i를 쓴다(이 PC에서 확인했다)
    • (*.log^)의 ^ — 이 줄 전체가 바깥 괄호 ( ... ) 안에 있어서, ^ 없이 )를 쓰면 CMD가 그 )를 바깥 괄호의 끝으로 읽는다. 그러면 do was unexpected at this time.이 뜨고 파일이 안 생긴다(이 PC에서 확인했다). ^는 바로 뒤 글자를 기호가 아닌 그냥 글자로 다루라는 표시다. 만들어진 cleanup.bat에는 ^가 빠진 (*.log)로 적힌다
    • echo echo cleanup done — 바깥 echo가 echo cleanup done이라는 글자를 파일에 쓴다. 배치 파일이 돌 때는 안쪽 echo가 cleanup done을 화면에 찍는다
    • .\cleanup.bat — 만든 배치 파일은 CMD 창에서 그 파일 경로를 쳐서 실행한다. .\는 「지금 폴더」라는 뜻이다. 이렇게 치면 cleanup done이 찍히고 .log 파일이 지워졌다(이 PC에서 확인했다)
  • CSV 파일 생성 — 쉼표로 칸을 나눈 표 파일이다. 첫 줄이 칸 이름이고 다음 두 줄이 데이터다
  • for /L %i in (1,1,5) do type nul > file%i.txt — /L은 숫자를 세는 반복이다. (1,1,5)는 「1부터 1씩 늘려 5까지」라서 %i가 1, 2, 3, 4, 5가 되고, file1.txt부터 file5.txt까지 빈 파일이 생긴다. CMD 창에 직접 칠 때는 %i처럼 %를 하나만 쓴다. 창에서 %%i라고 치면 %%i was unexpected at this time.이 뜬다. 같은 줄을 배치 파일 안에 적을 때만 %%i로 쓴다(이 PC에서 둘 다 확인했다)

배치 파일로 자동화한다

이 묶음은 배치 파일에 적어 두고 실행하는 줄이다. CMD 창에 한 줄씩 쳐도 돈다.

REM 파일 백업
copy C:\Important\data.txt C:\Backup\data_%date:~0,10%.txt

REM 로그 파일 정리 (7일보다 오래된 파일 삭제)
forfiles /S /M *.log /D -7 /C "cmd /c del @file"

REM 폴더 크기 계산
dir /s C:\Folder
  • %date:~0,10% — %date%는 오늘 날짜가 든 변수다. :~0,10은 그 글자에서 0번째부터 10글자만 잘라 쓴다. 이 PC에서 echo %date%는 2026-10-20이었고, 그래서 파일 이름이 data_2026-10-20.txt가 된다. 날짜 모양은 Windows 지역 설정을 따르므로 다른 PC에서는 다를 수 있다. 날짜에 /가 섞이면 파일 이름으로 못 쓰는데, 그런 PC에서 어떻게 되는지는 확인하지 않았다
  • forfiles /S /M *.log /D -7 /C "cmd /c del @file" — forfiles는 조건에 맞는 파일마다 명령을 하나씩 돌린다. /S 하위 폴더까지, /M *.log 이름이 .log로 끝나는 것, /D -7 마지막으로 고친 날이 오늘에서 7일을 뺀 날과 같거나 그보다 앞선 것, /C 각 파일에 돌릴 명령이다. cmd /c는 「CMD를 하나 새로 띄워 뒤의 명령을 실행하고 끝내라」는 뜻이다. del은 따로 있는 프로그램이 아니라 CMD 안에 들어 있는 명령이라서, forfiles가 혼자서는 못 돌린다. /C "del @file"로 주면 ERROR: The system cannot find the file specified.가 뜨고 파일이 남았다(이 PC에서 확인했다). @file에는 파일 이름이 하나씩 들어간다
  • dir /s C:\Folder — 출력 맨 끝의 File(s) 줄이 하위 폴더까지 합친 전체 크기다(위 「파일을 찾고 처리한다」의 find 예제와 같은 줄이다)

상황별로 바로 꺼내 쓰는 명령

상황 명령어
현재 폴더 확인 cd (경로 없이)
하위 폴더까지 파일 경로만 나열 dir /s /b
빈 파일 생성 type nul > filename.txt
텍스트 파일 생성 echo content > filename.txt
파일에 내용 추가 echo content >> filename.txt
CSV 파일 생성 echo field1,field2 > data.csv
파일 일괄 삭제 del /s /q C:\Path\*.ext
이 컴퓨터의 네트워크 설정 보기 ipconfig /all
상대 컴퓨터까지 연결되는지 확인 ping 호스트
포트 사용 현황 확인 netstat -ano
특정 포트 사용 프로세스 찾기 netstat -ano \| findstr :PORT
프로세스 강제 종료 taskkill /IM process.exe /F
디렉토리 구조 파일로 저장 tree /f > tree.txt
파일 내용 검색 findstr "text" C:\Path\*.txt
폴더째 복사하고 복사본 검사 xcopy source dest /E /Y /V

마지막 줄의 xcopy는 copy와 달리 폴더 안의 하위 폴더까지 통째로 복사한다. /E는 빈 하위 폴더까지 복사, /Y는 같은 이름의 파일을 덮어쓸지 묻지 않음, /V는 쓴 파일이 원본과 같은지 검사한다. 파일마다 몇 퍼센트 복사됐는지 보려면 /Z를 쓴다.


쓰기 전에 알아 둘 주의사항과 팁

  • del로 지운 파일은 휴지통에 가지 않는다. /s 옵션과 함께 쓸 때 특히 조심한다
  • 관리자 권한이 필요한 명령: sfc, chkdsk, 네트워크 공유 설정 등. 관리자 권한으로 연 CMD 창에서 실행한다. 관리자가 아닌 창에서 chkdsk C:를 치면 Access Denied as you do not have sufficient privileges가 뜬다(이 PC에서 확인했다)
  • rmdir /s /q는 폴더와 그 안의 내용을 묻지 않고 바로 지운다. 되돌릴 수 없다
  • 파이프(|)로 명령 결과를 걸러 낼 수 있다: tasklist | findstr notepad
  • >로 명령 결과를 파일에 저장할 수 있다: dir > output.txt
  • /?로 각 명령의 자세한 도움말을 본다: dir /?
  • 배치 파일(.bat)에 명령을 적어 두면 반복되는 작업을 한 번에 돌린다
  • ipconfig /flushdns로 DNS 캐시를 비운다. 도메인 접속이 이상할 때 쓴다
  • PowerShell은 CMD와 다른 셸이다. 명령의 결과를 글자가 아니라 객체로 넘긴다

참고 문서:


자신만의 철학을 만들어가는 중입니다.
최상단으로 이동했습니다!
확대 이미지

댓글남기기