我想将这个 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\nul
不myDirName/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 ) ) )