如何从批处理文件内部检查文件是否存在

562

如果只有某个文件存在时,我需要运行一个实用程序。在Windows批处理中如何实现?

3个回答

891
if exist <insert file name here> (
    rem file exists
) else (
    rem file doesn't exist
)

或者在单行中执行(如果只需要执行一个操作):
if exist <insert file name here> <action>

例如,如果存在autoexec.bat文件,则以下内容将打开记事本:
if exist c:\autoexec.bat notepad c:\autoexec.bat

10
如果你正在处理带有空格的路径:https://dev59.com/unVC5IYBdhLWcg3w9F89 - Nick
5
@loopkin - "else" 是合法的,参见 "if /?" ... "ELSE 子句必须出现在 IF 命令后的同一行。例如:[...numerous examples of use...]" - Chris J
4
谢谢你,Chris。你是正确的,似乎括号必须在else语句的同一行上。这就是我错了的地方。我想我永远不会习惯批处理语法 :( - scharette
3
如果你和我一样是个新手,而且忘记替换花括号,那么这个方法就不会起作用。所以请确保在{插入文件名}时删除{}!! 我曾因此尴尬地浪费了5分钟 :( - mez.pahlan
4
“IF EXIST”语句的一个注意点是:它无法检测到隐藏文件(具有“隐藏属性”的文件)。 - Explorer09
显示剩余5条评论

97
C:\>help if

在批处理程序中执行条件处理。

IF [NOT] ERRORLEVEL 数字 命令

IF [NOT] 字符串1==字符串2 命令

IF [NOT] EXIST 文件名 命令


69

尝试以下示例,摘自Windows XP上IF /?输出的内容:

IF EXIST filename.txt (
    del filename.txt
) ELSE (
    echo filename.txt 不存在。
)

您还可以使用IF NOT EXIST检查丢失的文件。

IF命令相当强大。认真阅读IF /?的输出会有所收获。同样地,尝试在许多其他内置命令上使用/?选项,可能会发现很多隐藏的宝藏。


12
为什么文件名末尾要加上“.”?这是打字错误吗? - Everyone
7
我引用了CMD.EXE实际内置的IF命令的帮助文本,其中包含这些点。我不知道为什么他们会把它们包括进去,似乎有些不一致。当然,EXIST关键字实际需要的是一个有效的文件名,可以是完全限定的。其他命令使用惯用语[驱动器:][路径]文件名代替此处使用的文本filename.,这显然更清晰。 - RBerteig

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