cd(또는 chdir)는 현재 작업 디렉터리를 표시하거나 지정한 디렉터리로 이동하는 내장 명령이다.
이 장을 읽기 전에
선행 챕터: 이 장은 07장: path에서 실행 파일을 찾는 경로를 다룬 뒤 이어진다. path가 “명령을 어디서 찾는가"였다면, cd는 “지금 내가 어디에 있는가"를 다룬다 — 이 둘이 갖춰져야 09장(dir)에서 그 자리의 내용을 들여다볼 수 있다.
이 장의 깊이: 입문. 다루지 않는 것: 디렉터리 자체를 만들고 지우는 것은 12장(md)·13장(rmdir)에서, 이전 위치로 돌아가는 스택 기반 이동은 11장(pushd, popd)에서 각각 다룬다.
사용법
| |
경로 없이 cd만 입력하면 현재 드라이브와 디렉터리를 표시한다 — 유닉스의 pwd에 해당하는 동작이 CMD에서는 별도 명령이 아니라 cd를 인수 없이 호출하는 것이다.
옵션
| 옵션 | 설명 |
|---|---|
/d | 드라이브와 디렉터리를 동시에 변경 |
<드라이브>: | 표시하거나 변경할 드라이브 지정(현재 드라이브와 다를 때) |
<경로> | 이동할 디렉터리 경로 |
.. | 상위 폴더로 이동 |
예시
| |
마지막 세 줄이 이 장에서 가장 중요한 예시다. D: 드라이브에 있는 상태에서 /d 없이 cd C:\Projects를 실행하면 화면상 아무 변화가 없어 보이지만, 실제로는 C: 드라이브가 “기억하는” 현재 디렉터리만 C:\Projects로 바뀌고 프롬프트는 여전히 D:\에 머문다. 그 상태에서 cd C:만 입력하면 그제서야 C: 드라이브로 전환되면서 방금 기억해둔 C:\Projects로 이동한 결과가 나타난다.
주의사항·함정
드라이브별로 별도의 “현재 디렉터리"가 있다: 이것이 CMD의 가장 잘 알려진 함정이다. Windows는 프로세스마다 드라이브 문자 각각에 대해 독립적인 현재 디렉터리를 유지한다. /d 없이 cd <다른드라이브>:<경로>를 실행하면 그 드라이브의 “기억된 현재 디렉터리"만 갱신될 뿐, 실제로 그 드라이브로 전환되지는 않는다. 드라이브 전환과 디렉터리 이동을 한 번에 하려면 반드시 /d를 써야 한다.
공백이 포함된 경로: 명령 확장이 켜져 있으면(01장 참고) cd username\programs\start menu처럼 공백이 있는 경로를 따옴표 없이 그대로 받아들인다.
“Spaces aren’t treated as delimiters, so
<path>can contain spaces without enclosing quotation marks.” — Microsoft Learn, “cd”
다만 명령 확장이 꺼져 있으면 이 동작이 사라지고 반드시 cd "C:\Program Files"처럼 따옴표로 감싸야 한다. 이식성을 고려한다면(명령 확장이 꺼진 환경까지 가정한다면) 공백이 있는 경로는 항상 따옴표로 감싸는 습관을 들이는 편이 안전하다.
대소문자 정규화: 명령 확장이 켜져 있으면 cd c:\temp처럼 입력해도 디스크에 저장된 실제 대소문자(C:\Temp)로 현재 디렉터리 문자열이 맞춰진다.
PowerShell의 Set-Location은 파일 시스템을 넘어서는 공급자 모델을 쓴다: PowerShell에서 cd에 대응하는 명령은 Set-Location(별칭 cd, sl)이다. CMD의 cd가 오직 파일 시스템 드라이브만 다루는 것과 달리, PowerShell의 Set-Location은 PSProvider라는 추상화 위에서 동작해 Set-Location HKLM:\처럼 레지스트리로, Set-Location Env:\처럼 환경 변수 목록으로도 “이동"할 수 있다. 다만 이 장에서 다룬 CMD 고유의 드라이브별 현재 디렉터리 기억 동작(C:만 입력했을 때 그 드라이브가 기억하던 위치로 돌아가는 것)은 PowerShell에 그대로 대응하는 개념이 없다.
흔한 오개념
“cd로 드라이브를 옮길 수 없다”는 오해가 흔하다. 정확히는 “경로만 주면” 드라이브가 안 바뀔 뿐이고, /d 스위치를 쓰거나 드라이브 문자만 단독으로 입력(C:)하면 드라이브 전환이 정상적으로 일어난다. 이 오해는 위에서 설명한 드라이브별 현재 디렉터리 기억 방식을 모를 때 생긴다.
다음 장에서는
다음은 09장 — 지금 있는 디렉터리 안의 파일·하위 디렉터리 목록을 보여주는 dir 명령을 다룬다.
평가 기준
cd(인수 없음)로 현재 위치를 확인하고,cd ..로 상위 폴더로 이동할 수 있다./d스위치가 왜 필요한지, 드라이브별로 별도의 현재 디렉터리가 유지된다는 CMD의 동작 방식을 설명할 수 있다.- 명령 확장이 켜졌을 때와 꺼졌을 때 공백 포함 경로를 다루는 방식이 어떻게 다른지 안다.
- 유닉스의
pwd에 해당하는 동작이 CMD에서는cd를 인수 없이 호출하는 것이라는 대응 관계를 설명할 수 있다.
![Featured image of post [CMD] 08. cd, chdir - 디렉터리 이동과 현재 위치](/post/cmd/cd-chdir-command-change-directory-windows-cmd/wordcloud_hu_776bae656bdac41c.webp)
![[CMD] 06. doskey - 명령줄 편집과 매크로](/post/cmd/doskey-command-line-editing-macros-history-windows/wordcloud_hu_f63759d3462d0fae.webp)
![[CMD] 07. path - 실행 파일 검색 경로](/post/cmd/path-command-executable-search-path-windows/wordcloud_hu_4d1691a65f2a7324.webp)
![[CMD] 08. cd, chdir - 디렉터리 이동과 현재 위치](/post/cmd/cd-chdir-command-change-directory-windows-cmd/wordcloud_hu_e5cf714a9f2f71a1.webp)
![[CMD] 09. dir - 파일·디렉터리 목록 조회](/post/cmd/dir-command-list-files-directories-windows-cmd/wordcloud_hu_1e8759708c791ad9.webp)
![[CMD] 10. tree - 디렉터리 구조 트리 표시](/post/cmd/tree-command-directory-structure-windows-cmd/wordcloud_hu_667822be26dd5a06.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)