2010-12-06 16:36:13 +0000 2010-12-06 16:36:13 +0000
64
64

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

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

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

它可以测试一个目录是否存在,如果不存在,它就会创建一个目录。

答案 (9)

79
79
79
2010-12-06 16:47:52 +0000
@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是有问题的。不包含后缀的反斜杠会测试一个文件或目录。所以,对于目录来说,要包含反斜线。

21
21
21
2011-12-06 11:52:52 +0000

这里是我刚刚发现的:

你可以测试一个nul文件是否存在,如果目录存在,就会包含一个nul文件,如果nul文件不存在,则说明目录不存在。

11
11
11
2012-05-12 15:36:37 +0000

使用反斜杠,而不是前斜杠: 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 不存在

编辑:只有当目录名不包含空格时,这句话才有效

5
5
5
2014-06-03 11:10:57 +0000

有的人建议使用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>
4
4
4
2013-10-11 11:29:44 +0000

我想知道为什么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 ) ) )
1
1
1
2014-06-03 09:50:53 +0000

我看到很多人在区分文件和文件夹时有问题。有没有人尝试过在检查过文件存在后,简单地将其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
)
0
0
0
2019-11-09 14:56:24 +0000

我更喜欢使用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
0
0
0
2012-05-04 10:41:48 +0000

如果myDirName是一个文件,而不是搜索的功能,那么 exist myDirName/nul

也是true。

-1
-1
-1
2018-08-24 18:31:30 +0000

找到一个文件夹应该没有这么难。我的解决方案,使用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"; } }