My previous post on testing network drives led me to further research the topic, and I came to quite surprising (at least for me) results: the result if a check with IF EXIST depend on whether![]()
- the drive is a local drive or a mapped network drive or a UNC path
- the path contains spaces or not
- the path is quoted or not
- cmd runs in administrator mode or user mode
I wrote a small batch file that contains a couple of assignments of the form
set dir=c:\temp set dir=c:\temp\with spaces etc.
and executed these tests on each value
if exist %dir% echo exists if exist %dir%\nul echo exists if exist %dir%\. echo exists if exist "%dir%" echo exists if exist "%dir%\nul" echo exists if exist "%dir%\." echo exists
These are the results
| directory | %dir% | %dir%\nul | %dir\. | “%dir%” | “%dir%\nul” | “%dir%\.” |
|---|---|---|---|---|---|---|
| local | x | x | x | x | x | |
| local (spaces) | - | - | - | x | x | |
| mapped (non-admin) | x | x | x | x | x | |
| mapped (non-admin, spaces) | - | - | - | x | x | |
| UNC | x | x | x | x | x | x |
| UNC (spaces) | - | - | - | x | x | x |
Comments:
Testing directory path containing spaces can only be performed using the quoted notation.
Mapped network drives can only be access in non-administrator mode (see these threads).
The only reliable way to test for directory existence is therefore to use the quoted “%dir%\.” notation.
To check whether cmd runs in administrator mode or not, use an admin statement such as ‘at’:
at >nul 2>nul if errorlevel 1 echo you are not in administrator mode

This article has been very helpful in debugging a few problems I had with testing for directories…. thank you so much!!!
[...] most hits up to today are related to batch programming, which is not really one of my core areas: Test if Directory exists in Batch file (.cmd) and Test if Network Directory exists in Batch [...]
Batch is such a mess. Thanks for this.
Thank you for sharing.
I also found that “%dir%\..” and “%dir%\*” also works .
(and if you already quote when setting %dir%, the test exist will not need quote)
For me: if exist c:\Windows\write.exe\. echo y
Prints “Y”.
\. returns true for files as well