Test if Directory exists in Batch file (.cmd)

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
About these ads

5 Responses to Test if Directory exists in Batch file (.cmd)

  1. Batch file developer says:

    This article has been very helpful in debugging a few problems I had with testing for directories…. thank you so much!!!

  2. [...] 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 [...]

  3. Greg says:

    Batch is such a mess. Thanks for this.

  4. 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)

  5. John Anson says:

    For me: if exist c:\Windows\write.exe\. echo y
    Prints “Y”.
    \. returns true for files as well

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: