Answers:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
由Barlop添加
尽管以上内容适用于这种特定情况,但标题中提到的是专门针对目录进行测试。普格的评论使用的if exist mydirname\
不是而是if exist mydirname
方式。一些答案使用了\ nul,但是\ nul在NT中是有问题的。不包括尾部反斜杠将测试文件或目录。因此,对于目录,请在结尾加上反斜杠。
if exist mydirname\
您所说的其余答案。或者,您实际上可以获取test
二进制文件并在Windows上使用它。
mkdir
。
if not 1==1 echo hmm
或是否存在myDirName \ ELSE
这是我刚刚发现的:
您可以测试是否存在nul文件。如果目录存在,它将包含一个nul文件;如果该nul文件不存在,则该目录不存在。
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
Windows NT。
\nul
,在Windows NT中不再是必需的,普通if exist "C:\Program Files (x86)"
有些人建议做\ 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>
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
再问一个问题
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>
我想知道为什么乔在我在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 ) ) )
我看到许多文件和文件夹区分问题。有没有人尝试在检查它存在之后简单地将其插入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
)
MyDir
第一行之后的所有出现都应为%MyDir%
。(2)cd ..
如果%MyDir%
是多级路径名(例如Pictures\cats
),甚至是绝对路径名(例如),都不会做您想要的 \Windows
。考虑使用pushd
/ popd
和/或setlocal
。
exist myDirName/nul
如果myDirName是文件,也是如此,不是搜索的功能
C:\blah>touch abe<ENTER>C:\blah>if exist abe\nul echo err<ENTER> C:\blah>if exist abe/nul echo err<ENTER>C:\blah>
我不喜欢\ nul在NT中,但事实并非如此。您应该已经给出了一些输出。
查找文件夹并不难。我的解决方案,使用perl:
for($ cnt = $#ARGV; $ cnt> = 0;-$ cnt) { 如果(-d“ $ ARGV [$ cnt]”){ 打印“ argv [$ cnt] = $ ARGV [$ cnt]是一个文件夹\ n”; $ dir = $ ARGV [$ cnt]; 打破; }其他{ 打印“ argv [$ cnt] = $ ARGV [$ cnt]不是文件夹\ n”; } }
mkdir -p myDirName
。花了几天的时间尝试将相对简单的bash脚本转换为batch-sh * t(将函数的结果分配给变量?)之后,我决定让人们安装cygwin。