Using cd command in Windows command line, can't navigate to D:\

This may be a silly question, and I think I have looked elsewhere to find the answer... Might be a path issue, but when I open the command line and type from the C:\>:

cd D:\

I cannot get to the D drive. Even if I type:

cd D:\<folder name>

The command.exe will auto-complete the line with the tab key, so it knows where I'm at. It just doesn't print to screen the result or actually get me there. This problem exists for the network drives as well.

Now, if I use the chdir (cd) command like this:

chdir D: or cd d:

I get the print out of the D:\ below the command but it still says I'm in the C:\.

I feel like I'm missing something simple.


Going back to the days of DOS, there's a separate "current directory" for each drive. cd D:\foldername changes D:'s current directory to the foldername specified, but does not change the fact that you're still working on the C: drive.

What you want is simple:

D:

Here you can see how the "separate current directory for each drive" thing works:

C:\Users\coneslayer>e:

E:\>c:

C:\Users\coneslayer>cd e:\software

C:\Users\coneslayer>e:

e:\Software>

It did work, as the command is designed to work.

You simply don't know how it's actually supposed to work.

You're not using a Unix or Linux shell program. The cd command in Microsoft's command interpreter doesn't behave as the cd commands in such shells do. It behaves somewhat differently. In particular, it doesn't always change directory. In Unix and Linux shells, cd only ever sets the working directory. In Microsoft's command interpreter, cd sometimes queries it. There's no separate pwd command, so cd does two jobs.

If you give it no arguments, or an argument that is just a drive letter and a colon without a path, then it reports the current directory instead of changing it. If you give it no arguments, it reports the current directory of the current drive of the command interpreter process. If you give it only a drive letter and a colon as an argument, it reports the command interpreter process' current directory of that drive. Each drive has its own current directory in the command interpreter. (This is a fiction maintained by the run-time libraries for Microsoft's and several other vendors' implementations of various programming languages. Win32 itself doesn't work this way.)

So when you gave it d: as an argument, it reported the the command interpreter process' current directory on drive D to you, which happened to be D:\. If you'd given it no arguments at all, it would have reported C:\ to you.

If you want the cd command to always be in set mode and never be in query mode you need to add the /D option to it. This forces the command to always be in set mode, and also extends it so that it changes the current drive as well as changing a drive's current directory. (In other words, it works more like the underlying Win32 API actually does.)

So, for example, the command line

cd /d d:
will change directory to whatever the current directory on drive D is, and also change the current drive to drive D.

If you want to change the command interpreter process' current drive otherwise, the cd command is not the way. You do so by simply typing the drive letter and a colon:

d:

Further reading

  • JP Software (2011). CD/CHDIR TCC On-line Help.
  • Microsoft corporation (2001). Chdir (CD). TechNet Windows XP Command line reference A–Z.