如何检查 IF Exist 中是不是存在其中一个或文件?

Posted

技术标签:

【中文标题】如何检查 IF Exist 中是不是存在其中一个或文件?【英文标题】:How can I check if either or file exists in IF Exist?如何检查 IF Exist 中是否存在其中一个或文件? 【发布时间】:2021-09-05 16:13:39 【问题描述】:

如何检查 If Exist 语句中是否存在一个或文件?

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

我该怎么做?我只想要么存在,要么做点什么。

【问题讨论】:

你似乎想检查目录是否存在而不是文件,所以你应该使用if exist "C:\Windows\*" 我试过上面的命令都没有成功。如果我使用 If not exists and one exists,那么它仍然会运行我不希望它执行的 else 语句。如果其中一个文件存在,我基本上希望它回显某些内容并且什么也不做。否则,如果两者都不存在则做某事。 【参考方案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 命令处理器设计用于一个接一个地处理命令行,这就是 batch 这个词的含义。命令 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

要了解所使用的命令及其工作原理,请打开command prompt 窗口,在那里执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

echo /? goto /? if /? rem /?

注意:

Windows 上的目录分隔符是 \,而不是像 Linux 或 Mac 上的 /。 Windows 文件管理通常会自动将所有/ 替换为\,然后将不带或带通配符模式的文件/文件夹参数字符串传递给文件系统,正如Microsoft 在有关Naming Files, Paths, and Namespaces 的文档中所解释的那样。但是在文件/文件夹参数字符串中使用 / 而不是 \ 可能会导致意外行为。

在命令提示符窗口中直接运行以下命令行时使用/ 导致的意外行为示例:

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 的这种错误解释。

摘要:\ 是目录分隔符,/ 是命令选项。

【讨论】:

以上是关于如何检查 IF Exist 中是不是存在其中一个或文件?的主要内容,如果未能解决你的问题,请参考以下文章

OCTAVE:检查单元格数组的元素是不是存在

如何检查所有弹簧占位符是不是存在?

如何使用 PHP 检查一个单词是不是包含在另一个字符串中?

检查html元素是不是存在的正确方法[重复]

jQuery 如果存在

检查目录是不是存在并计算与其中模式匹配的文件[重复]