如何检查Windows中是否存在目录?

Pie*_*tro 74 windows-7 command-line batch-file

我想将此 Linux/Bash 脚本转换为 Windows shell:

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Run Code Online (Sandbox Code Playgroud)

它测试目录是否存在,如果不存在则创建它。

Sat*_*hat 98

@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Run Code Online (Sandbox Code Playgroud)

由 Barlop 添加

虽然上述适用于这种特殊情况,但标题说的是专门针对目录进行测试。Phogg 的评论使用if exist mydirname\而不是if exist mydirname方式。一些答案使用了 \nul 但 \nul 在 NT 中是有问题的。不包括尾随反斜杠将测试文件或目录。因此,对于目录,请包含尾部反斜杠。

  • 这对于测试文件存在是正确的,但是你怎么知道它是一个目录?最简单的答案是“如果存在 mydirname\”,其余的如您所说。或者,您实际上可以获得一个“test”二进制文件并在 Windows 上使用它。 (28认同)

小智 22

这是我刚刚发现的:

您可以测试是否存在空文件;如果目录存在,它将包含一个空文件,如果空文件不存在,则该目录不存在。

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Run Code Online (Sandbox Code Playgroud)

  • 它应该是反斜杠,而不是正斜杠。 (7认同)
  • +1 - 这适用于所有 Windows 和 MS-DOS 版本,不像普通的“如果存在目录名”似乎特定于 Windows NT。 (2认同)

小智 12

使用反斜杠,而不是正斜杠:myDirName\nulmyDirName/nul

md foo 
echo.>bar 
for %I in (foo bar xyz) do @( 
  if exist %I ( 
    if exist %I\nul ( 
      echo -- %I is a directory 
    ) else ( 
      echo -- %I is a file 
    ) 
  ) else ( 
    echo -- %I does not exist 
  ) 
)
Run Code Online (Sandbox Code Playgroud)

-- foo 是一个目录
-- bar 是一个文件
-- xyz 不存在

编辑:这仅适用于目录名称不包含空格的情况


bar*_*lop 7

有些人建议使用 \nul,但这在 NT 中似乎并不可靠

C:\blah>md abc

C:\blah>if exist abc\nul echo yes
yes

C:\blah>if exist "abc\nul" echo yes

C:\blah>
Run Code Online (Sandbox Code Playgroud)

http://www.dostips.com/forum/viewtopic.php?f=3&t=4913

foxidrive writes-

The trick with nul worked in pre NT versions of windows.

Now you would use this, with a trailing backslash.

if exist "C:\abcde\" echo the folder exists
Run Code Online (Sandbox Code Playgroud)

重新提问

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes

C:\blah>
Run Code Online (Sandbox Code Playgroud)