如何检查 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 中是不是存在其中一个或文件?的主要内容,如果未能解决你的问题,请参考以下文章