如何通过 IF EXIST 条件检查目录或文件是否存在?

问题描述 投票:0回答:1

如何检查目录或文件是否存在且具有

IF EXIST
条件?

比如

If exist "C:/Windows/" OR "C:/Windows2" (
    rem Do something
) else (
    rem Something else
)

我该怎么做?

if-statement batch-file exists
1个回答
1
投票

简单示例1:

@echo off
if not exist "%SystemRoot%\" if not exist "C:\Windows2" goto MissingFolderFile
echo Found either the directory %SystemRoot% or the file/folder C:\Windows2.
rem Insert here more commands to run on either the folder C:\Windows
rem or the file/folder (=any file system entry) C:\Windows2 existing.
goto EndDemo

:MissingFolderFile
echo There is neither the directory %SystemRoot% nor the file/folder C:\Windows2.
rem Insert here more commands to run on neither folder C:\Windows
rem nor file/folder C:\Windows2 existing.

:EndDemo
pause

Windows 命令处理器旨在逐个处理命令行,这就是“批处理”一词的含义。命令 GOTO 是在批处理文件中使用的首选命令,不是在下一个命令行上继续批处理,而是根据 IF 条件继续批处理,即从命令的一个堆栈(即批处理)更改处理行到另一组命令行。 简单示例2:

@echo off if exist "%SystemRoot%\" goto FolderExists if exist "C:\Windows2" goto FS_EntryExists echo There is neither the directory %SystemRoot%\ nor C:\Windows2. rem Insert here more commands to run on neither folder C:\Windows rem nor file/folder/reparse point C:\Windows2 existing. goto EndDemo :FS_EntryExists echo The file system entry (file or folder) C:\Windows2 exists. rem Insert here more commands to run on C:\Windows2 existing. goto EndDemo :FolderExists echo The folder %SystemRoot% exists. rem Insert here more commands to run on folder C:\Windows existing. :EndDemo pause

要了解所使用的命令及其工作原理,请打开
命令提示符

窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

    echo /?
  • goto /?
  • if /?
  • rem /?
  • 
    
注意:

Windows 上的目录分隔符是

\

,而不是 Linux 或 Mac 上的

/
。在将不带或带通配符模式的文件/文件夹参数字符串传递到文件系统之前,Windows 文件管理通常会自动将所有
/
替换为
\
,如 Microsoft 在有关
命名文件、路径和命名空间
的文档中所述。 。但是在文件/文件夹参数字符串中使用 / 而不是
\
仍然会导致意外行为。
由于在命令提示符窗口中直接运行以下命令行而使用 

/

导致意外行为的示例:

for %I in ("%SystemDrive%/Windows/*.exe") do @if exist "%I" (echo Existing file: "%I") else echo File not found: "%I"

此命令行输出由 
FOR

在 Windows 目录中找到的可执行文件名列表,这些文件名对于命令 IF 不存在,只是因为使用 / 导致将找到的文件名分配给循环变量小路。因此,仅当系统驱动器上的当前目录恰好是 Windows 目录时,此命令行才有效。

使用 

\

作为目录分隔符的相同命令行:

for %I in ("%SystemDrive%\Windows\*.exe") do @if exist "%I" (echo Existing file: "%I") else echo File not found: "%I"

此命令行将 Windows 目录中可执行文件的每个文件名输出为具有完整路径的现有文件。

另一个例子:

当前驱动器的根目录中有一个目录

Downloads

,该驱动器上的当前目录是

Temp
,例如
D:\Downloads
是想要的当前目录,
D:\Temp
是当前目录。
使用的命令是:

cd /Downloads

结果是错误信息:

系统找不到指定的路径。

正确使用目录分隔符的命令:

cd \Downloads

此命令适用于 
D:\Temp

为当前目录且

D:\Downloads
已存在。

CD

将不正确的 /Downloads 目录路径开头的字符串

/D
解释为选项
/D
来更改驱动器,并在当前目录中搜索
ownloads
而不是根目录中的
Downloads
的原因当前驱动器的目录。通过使用正确的目录参数字符串
\Downloads
可以避免 CD 的错误解释。
摘要:

\

是目录分隔符,

/
是命令选项。
    

© www.soinside.com 2019 - 2024. All rights reserved.