如何在Windows中检查目录是否存在?
我想把这个Linux/Bash脚本翻译成Windows shell:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
它可以测试一个目录是否存在,如果不存在,它就会创建一个目录。
我想把这个Linux/Bash脚本翻译成Windows shell:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
它可以测试一个目录是否存在,如果不存在,它就会创建一个目录。
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
**由Barlop添加*
虽然上面的方法适用于这种特殊情况,但标题中说的是专门针对目录的测试。Phogg的评论是使用if exist mydirname
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
`
**由Barlop添加*
虽然上面的方法适用于这种特殊情况,但标题中说的是专门针对目录的测试。Phogg的评论是使用而不是if exist mydirname
。有些答案使用了\nul,但在NT中,\nul是有问题的。不包含后缀的反斜杠会测试一个文件或目录。所以,对于目录来说,要包含反斜线。
使用反斜杠,而不是前斜杠: 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 不存在
编辑:只有当目录名不包含空格时,这句话才有效
有的人建议使用NT,但这似乎在NT中并不可靠
C:\blah>md abc
C:\blah>if exist abc\nul echo yes
yes
C:\blah>if exist "abc\nul" echo yes
C:\blah>
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
Re the question
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>
我想知道为什么joe会有一个downvote,因为我在Windows 7上也遇到了同样的问题,就是
IF EXIST filenameNUL
IF EXIST filenameNUL
对文件和目录都返回 “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 ) ) )
我看到很多人在区分文件和文件夹时有问题。有没有人尝试过在检查过文件存在后,简单地将其CD导入?那么cd要么成功,要么失败。
set MyDir = "MyTestDir"
IF exist MyDir (
cd MyDir
IF ERRORLEVEL NEQ 0 (
echo "Error: %MyDir% already exists, but it is a file!"
exit 1
) else (
# Do not forget to cd back
cd ..
)
) else (
# Did not exist yet, so create it.
mkdir MyDir
)
我更喜欢使用dir /d | findstr \[\.\.\]
:
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName&&echo= Is NOT dir
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName
用于创建是否存在和忽略错误…..
2>nul mkDir myDirName
也是…..
if exist "myDirName\." (echo/"ok") else mkdir myDirName
rem :: or direct create myDirName hidden/ignoring error
2>nul mkdir myDirName & if exist "myDirName\." echo/ exist
rem :: output: exist
找到一个文件夹应该没有这么难。我的解决方案,使用perl:
for($cnt=$#ARGV; $cnt\>=0; --$cnt) { if ( -d "$ARGV[$cnt]" ) { print "argv[$cnt]=$ARGV[$cnt] is a folder\n"; $dir = $ARGV[$cnt]; break; } else { print "argv[$cnt]=$ARGV[$cnt] is Not a folder\n"; } }