Windows path with no slash after drive letter and colon - what does it point to? Windows path with no slash after drive letter and colon - what does it point to? powershell powershell

Windows path with no slash after drive letter and colon - what does it point to?


This is standard DOS/Windows behavior and has always been like this. Open a command line and see:

C:\Users\Tim>d:              # change current drive to d:D:\>c:                       # change back to c: - back in the same directoryC:\Users\Tim>cd d:\users     # change current directory ON D:C:\Users\Tim>cd \            # still same directory - backslash leads to top dirC:\>d:                       # change current drive to d:D:\Users>                    # notice that we're now in the directory D:\Users

The drive letter always references the current directory of that drive; the (leading) backslash gets you to the top directory.


When you specify a path with a drive letter but no initial backslash, it is typically interpreted as a relative path to the current directory on the specified drive. In particular, this is how ordinary Win32 API file functions will interpret it; therefore, most software which passes unmodified file paths to Win32 file functions will also behave this way.

On my machine, this works as expected in PowerShell, except for one complication:

C:\Users\social>powershellWindows PowerShellCopyright (C) 2009 Microsoft Corporation. All rights reserved.PS C:\Users\social> [System.IO.Path]::GetFullPath("c:foo.txt")C:\Users\social\foo.txtPS C:\Users\social> cd \PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt")C:\Users\social\foo.txtPS C:\>

What we see here is that when we change the current directory in PowerShell, it doesn't actually change the current directory. That is, PowerShell has its own idea of what the current directory is, but hasn't bothered to tell Windows about the change. You can confirm this with Process Explorer (which can be downloaded from Microsoft's web site); in the above case, even after using cd, the actual current directory for the PowerShell process was still C:\Users\social.

You also mention Explorer. As near as I can figure, Explorer does its own validation of the path that it is given, which for whatever reason does not permit drive-relative paths. If the path is not considered valid, or does not point to an actual file/folder, the default action is to open the user's Documents folder.


It uses the current working directory on that drive. Each process "remembers" a current working directory per drive:

 C:\> cd somepath\subdir C:\somepath\subdir>  d: D:\> dir c:subsubdir       <--  refers to C:\somepath\subdir\subsubdir