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


160

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

如果FolderA不存在,那么我想检查是否存在另一个文件夹(FolderB)。如果FolderB不存在,则应显示一条消息并创建该文件夹,如果FolderB存在,则应显示一条消息。

有人对我可以简单地在记事本上创建批处理文件的代码有任何想法吗?

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


7
谷歌搜索提供了测试是否存在驱动器或目录。这正好说明了您要如何做...
NealB 2014年

2
在SO上搜索“批处理文件目录存在”,找到Windows批处理文件查找目录(如果不存在)创建然后移动文件,它向您展示如何查看目录是否存在。这里也有关于从批处理文件创建目录的文章。在发布新问题之前,请进行一些基础研究;好的机会是先前在这里提出的问题。谢谢。
肯·怀特

3
Windows批处理是一种编程语言,请检查文件是否存在是一种编程任务。出现在主题上。
奥德里斯·梅斯卡斯卡斯

1
应该关闭,因为如何在批处理脚本中测试文件是否是目录?而不是“偏离主题”
Michael Freidgeim

Answers:


259

尝试使用此:

IF EXIST yourfilename (
echo Yes 
) ELSE (
echo No
)

yourfilename替换为文件名。

有关目录,请查看此https://jeffpar.github.io/kbarchive/kb/065/Q65994/

C:
IF NOT EXIST C:\WIN\ GOTO NOWINDIR
CD \WIN
:NOWINDIR

尾部的反斜杠('\')似乎足以区分目录和普通文件。


2
您的答案的第二部分是不完整的。
tmj 2014年

4
if exist "c:\folder\nul" echo ok在Windows 7下对我不起作用if exist "c:\folder\" echo ok
亚历山大·盖布赫

2
@AlexanderGelbukh-是的,您if exist "networkPath\nul"可以错误地将文件报告为Windows网络驱动器上的文件夹。不幸的是,这些人if exist "networkPath\"遭受同样的问题。请参阅stackoverflow.com/a/8669636/1012053上的2015-12-08更新,以获取在我所有测试中都可靠的技术。
dbenham

@AlexanderGelbukh不带引号的作品。当然,这会限制您在目录路径中包含空格。
Marc.2377 '12

1
是的,没有引号就可以了。但是,带引号的功能甚至不适用于本地驱动器:if exist c:\Windows\nul echo oksaid ok,但if exist "c:\Windows\nul" echo ok什么也没说。正如我刚才所说,虽然if exist "c:\Program Files\nul" echo ok什么都不说,if exist "c:\Program Files\" echo okok和这样的作品即使是带有空格的路径。
亚历山大·盖布赫

34

我认为答案在这里(可能重复):

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

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

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

正如foxidrive所说,这在NT类窗口上可能不可靠。它对我有用,但是我知道它有一些局限性(您可以在引用的问题中找到)

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

应该足以用于现代窗户。


6
\ nul技术在NT类窗口上不可靠。但是在MSDOS和Win9x中还可以。现代Windows中的解决方案很简单 if exist "c\:folder\" echo folder exists
foxidrive 2014年

1
我认为这也是在引用链接中指定的。
CosminVană2014年

仍然不明白为什么我投票不足(这意味着“无用”)。我在问题涵盖答案的前提下添加了对问题的引用。
CosminVană2014年

之所以没有用,可能是因为它不适用于当前计算机,并且您先前的回答没有任何区别。某些人仍会否决您的答案,因为它无法回答所提出的问题。
foxidrive 2014年

2
来自support.microsoft.com/kb/65994 “ NUL始终存在于本地MS-DOS FAT驱动器上” –如E:\NUL
CAD blo15年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.