md(또는 mkdir)는 새 디렉터리(폴더)를 만드는 내장 명령이다. 두 이름은 완전히 동일한 명령을 가리킨다.
이 장을 읽기 전에
선행 챕터: 이 장은 11장: pushd, popd로 Part 1(CMD 기초와 탐색)을 마친 뒤 이어지며, Part 2(파일과 디렉터리 조작)의 첫 장이다. Part 1이 이미 존재하는 디렉터리를 오가는 법이었다면, Part 2는 그 대상 자체를 만들고 지우고 옮기는 법을 다룬다.
이 장의 깊이: 입문. 다루지 않는 것: 만든 디렉터리를 지우는 것은 13장(rmdir)에서 다룬다.
사용법
| |
옵션
md/mkdir는 별도 스위치 없이 경로 하나만 받는다.
예시
| |
주의사항·함정
명령 확장 여부에 따라 다단계 생성이 갈린다: 01장에서 다룬 명령 확장이 켜져 있으면(기본값) 중간 경로가 존재하지 않아도 mkdir \Taxes\Property\Current 한 줄로 Taxes, Taxes\Property, Taxes\Property\Current를 한 번에 만든다.
“Command extensions, which are enabled by default, allow you to use a single mkdir command to create intermediate directories in a specified path.” — Microsoft Learn, “mkdir”
명령 확장이 꺼져 있으면 이 동작이 사라지고, 같은 결과를 얻으려면 md \Taxes, md \Taxes\Property, md \Taxes\Property\Current를 순서대로 실행해야 한다. 명령 확장이 꺼진 환경(예: 오래된 배치 스크립트가 cmd /e:off로 명시적으로 확장을 끈 경우)에서 다단계 mkdir 한 줄이 실패한다면 이 차이를 의심해야 한다.
이미 있는 이름과 충돌하면 오류: 같은 이름의 디렉터리(또는 파일)가 이미 있으면 오류가 나고 아무 것도 만들어지지 않는다. 배치 스크립트에서 반복 실행해도 안전하게 만들려면, 먼저 대상이 있는지 확인(if not exist, 4부에서 다룬다)한 뒤 md를 실행하는 패턴을 쓴다.
공백이 있는 경로: 공백이 포함된 경로는 따옴표로 감싼다(mkdir "Folder With Spaces").
PowerShell에서는 New-Item으로 같은 동작을 얻는다: PowerShell의 대응 명령은 New-Item -ItemType Directory -Path "..." -Force다. 여기서 -Force는 단순히 “이미 있어도 오류 없이 넘어간다"는 뜻에 그치지 않고, 지정한 경로의 중간 부모 디렉터리가 없어도 함께 만들어준다는 점에서 md의 명령 확장 기반 다단계 생성과 결과가 비슷하다. 다만 md는 확장이 켜져 있으면 스위치 없이 기본 동작으로 이 일을 하는 반면, New-Item은 -Force를 명시적으로 붙여야 한다는 차이가 있으므로 배치 스크립트를 PowerShell로 옮길 때 이 플래그를 빠뜨리지 않아야 한다.
흔한 오개념
“mkdir -p처럼 중간 경로를 항상 자동으로 만들어준다”는 오해가 있다. 유닉스 mkdir -p에 해당하는 동작은 CMD에서 별도 스위치 없이 명령 확장이 켜져 있을 때만 자동으로 적용되는 기본 동작이라는 점이 다르다. 확장이 꺼진 환경까지 고려한 이식성 있는 배치 스크립트를 짜야 한다면, 이 기본 동작에 기대지 않고 단계별로 만드는 편이 안전하다.
다음 장에서는
다음은 13장 — md로 만든 디렉터리를 지우는 rmdir(rd) 명령을 다룬다.
평가 기준
- md와 mkdir가 동일한 명령이라는 것을 안다.
- 명령 확장이 켜져 있을 때와 꺼져 있을 때 다단계 디렉터리 생성이 어떻게 다른지 설명할 수 있다.
- 이미 존재하는 이름과 충돌할 때의 동작과, 배치 스크립트에서 안전하게 재실행하는 패턴의 필요성을 안다.
![Featured image of post [CMD] 12. md, mkdir - 디렉터리 생성](/post/cmd/md-mkdir-command-create-directory-windows-cmd/wordcloud_hu_c731a0ce81087d85.webp)
![[CMD] 10. tree - 디렉터리 구조 트리 표시](/post/cmd/tree-command-directory-structure-windows-cmd/wordcloud_hu_667822be26dd5a06.webp)
![[CMD] 11. pushd, popd - 디렉터리 스택](/post/cmd/pushd-popd-command-directory-stack-windows-cmd/wordcloud_hu_ea34be24bee68813.webp)
![[CMD] 12. md, mkdir - 디렉터리 생성](/post/cmd/md-mkdir-command-create-directory-windows-cmd/wordcloud_hu_6d5e963e6f2f48fc.webp)
![[CMD] 13. rmdir, rd - 디렉터리 삭제](/post/cmd/rmdir-rd-command-remove-directory-windows-cmd/wordcloud_hu_5c79698f223a7543.webp)
![[CMD] 14. copy - 파일 복사](/post/cmd/copy-command-copy-files-windows-cmd/wordcloud_hu_ab1a3c6e36b23ca8.webp)
![[CMD] 08. cd, chdir - 디렉터리 이동과 현재 위치](/post/cmd/cd-chdir-command-change-directory-windows-cmd/wordcloud_hu_e5cf714a9f2f71a1.webp)
![[CMD] 17. move - 파일·디렉터리 이동과 이름 변경](/post/cmd/move-command-move-files-directories-windows-cmd/wordcloud_hu_3751b6ad1453368c.webp)
![[CMD] 20. type - 텍스트 파일 내용 출력](/post/cmd/type-command-display-file-contents-windows-cmd/wordcloud_hu_d33430432660f484.webp)