使用 .bat 文件检查文件夹是否存在

240

我希望能够检查特定文件夹(FolderA)是否存在,如果存在,则显示一条消息,然后退出批处理文件。

如果FolderA不存在,则需要检查另一个文件夹(FolderB)是否存在。 如果FolderB不存在,则应显示一条消息并创建该文件夹,如果FolderB存在,则应显示一条消息说明其已存在。

有人知道在记事本中可以使用的代码来创建一个批处理文件以允许我执行此操作吗?

所有这些都需要在一个.bat文件中完成。


7
谷歌搜索会显示测试驱动器或目录是否存在。这篇文章详细说明了如何做你所要求的事情... - NealB
2
在SO上搜索“批处理文件目录存在”会找到Windows批处理文件查找目录,如果不存在则创建并移动文件,它展示了如何检查目录是否存在。这里也有一些关于从批处理文件中创建目录的帖子。在发布新问题之前,请进行一些基本的研究;很可能这个问题以前已经被问过了。谢谢。 - Ken White
4
Windows批处理是一种编程语言,检查文件是否存在是一个编程任务。这是该话题的内容。 - Audrius Meškauskas
3
应该将其标记为“重复”而非“不相关”,关闭该问题,同时指向 如何在批处理脚本中测试文件是否为目录?这个问题。请注意,翻译过程中要保持原文意思不变,尽量使翻译通俗易懂,不要添加解释或其他内容。 - Michael Freidgeim
@NealB,那篇微软知识库文章的链接返回了404错误。但是,您可以查看该文章的存档版本 - homersimpson
对于那些以“信息不足”为由关闭此问题的人,我要说一句:去你的,你才是 Stack Overflow 的问题所在。 - Mehdi
2个回答

389

对于一个文件:

if exist yourfilename (
  echo Yes 
) else (
  echo No
)

用你的文件名替换 yourfilename

对于一个目录:

if exist yourfoldername\ (
  echo Yes 
) else (
  echo No
)

yourfoldername替换为您的文件夹名称。

似乎在路径后添加一个反斜杠(\)即可区分目录和普通文件。

关于if命令的官方文档


2
你的回答的第二部分是不完整的。 - tmj
5
在Windows 7下,if exist "c:\folder\nul" echo ok并没有起作用。正确的写法是:if exist "c:\folder\" echo ok - Alexander Gelbukh
3
@AlexanderGelbukh - 你是正确的,if exist "networkPath\nul" 可能会错误地将一个文件报告为 Windows 网络驱动器上的文件夹。不幸的是,if exist "networkPath\" 也有同样的问题。请参阅 https://dev59.com/tWoy5IYBdhLWcg3wQr5i#8669636 上的2015-12-08更新,了解在我所有的测试中一直可靠的技术。 - dbenham
2
是的,不加引号它可以工作。但是,即使对于本地驱动器,加上引号也无法工作:if exist c:\Windows\nul echo ok 会输出 ok,但是 if exist "c:\Windows\nul" echo ok 则什么都不会输出。正如我所说,虽然 if exist "c:\Program Files\nul" echo ok 什么都不会输出,但是 if exist "c:\Program Files\" echo ok 会输出 ok,因此可以处理带有空格的路径。 - Alexander Gelbukh
1
微软的链接已经失效了,最好将其删除。 - mchar
显示剩余4条评论

42

我认为答案可能在这里(可能是重复的内容):

如何在批处理脚本中测试文件是否为目录?

IF EXIST %VAR%\NUL ECHO It's a directory

用你的目录替换 %VAR%。请阅读原始答案,因为其中包括有关处理文件夹名称中的空格的详细信息。

正如foxidrive所说,这在NT类Windows上可能不可靠。它对我来说有效,但我知道它有一些限制(可以在参考的问题中找到)。

if exist "c:\folder\" echo folder exists 

这应该足够适用于现代Windows。


6
\nul技术在NT类Windows系统上不可靠。但在MSDOS和Win9x系统中表现良好。在现代Windows系统中的解决方案很简单:`if exist "c\:folder\" echo folder exists` - foxidrive
1
我认为这也在参考链接中指定了。 - Cosmin Vană
我仍然不明白为什么我被踩了(意思是“没有用处”)。我已经在问题中添加了参考,其中答案涵盖了所需的情况。 - Cosmin Vană
可能之所以不实用是因为它不适用于当前的设备,并且你之前的回答没有做出任何区分。一些人可能会因为你的回答没有按照提问者的问题来回答而给你的回答投下负评。 - foxidrive
2
在本地 MS-DOS FAT 驱动器上,“NUL” 总是存在的,例如 E:\NUL - CAD bloke
如果存在“SomePath\”,也会报告文件存在。据我回忆,if exist "SomePath\*" 甚至可以用于网络路径... - aschipfl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接