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

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

我想将这个 Linux/Bash 脚本翻译成 Windows shell:

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi

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

答案1

@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

由 Barlop 添加

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

答案2

以下是我刚刚发现的情况:

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

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

答案3

使用反斜杠,而不是正斜杠: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 
  ) 
)

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

编辑:这仅当目录名称不包含空格时才有效

答案4

我很好奇为什么 joe 投了反对票,因为我在 Windows 7 上也遇到了同样的问题,即

如果存在文件名\NUL

对文件和目录都返回了 TRUE。我找到了一个替代解决方案www.robvanderwoude.com/battech_ifexistfolder.php并提出了 DVF FOR 循环的修订版本:

FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )

相关内容