Windows command prompt - Get relocated user's Documents folder

Unfortunately, there's not a simple environment variable you can check from a batch script if you've redirected this from the default path relative to your profile. You can see the full list of environment variables (including some undocumented) here:

http://ss64.com/nt/syntax-variables.html

Another thing to keep in mind is folder redirection even allows you to move these to a network share. There doesn't have to be a "drive" you can use all; it might just be a UNC path.

The good news is the information you want is available at the following registry location:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal

There's a whole set of folders you can move around in that User Shell Folders key, but to read the My Documents folder here using Windows Batch looks like this:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

On my machine this produces the following output, which may be more or less useful to you depending on what you need and how good you are with Windows Batch scripts:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    Personal    REG_EXPAND_SZ    C:\Users\joel\Documents

You can also try vbscript:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

or Powershell:

[Environment]::GetFolderPath('MyDocuments')

This may eventually be available via bash on Windows, too (really!), but I haven't seen how to do it yet in a way that will be consistently accurate.


Assuming you have write access to either the current folder or some known-extant location on the computer... you can use PowerShell!

The Environment.GetFolderPath function can get the file system path of well-known locations, including the Documents folder. This PowerShell command prints the Documents path:

[Environment]::GetFolderPath('MyDocuments')

It can be written to a file with the Out-File cmdlet. The redirection operator > doesn't really work here because it produces a Unicode text file with a BOM, which is difficult to work with in the batch processor.

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

That file can be read into a batch variable with set /p. Putting it all together, we get this batch script fragment:

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

The path to the user's Documents folder can now be expressed as %DOCSPATH%.