如何在 Windows Batch 中创建“if and if”语句?

如何在 Windows Batch 中创建“if and if”语句?

这个问题更让人好奇,但是 Windows Batch 中有没有办法能够创建if file.ext exists && if file2.ext exists (echo Yes.) else (echo No.)-type 命令?

答案1

是的,您可以实现 AND/OR 运算符,如下所示:

if exist file1.ext (
  if exist file2.ext (
    echo Yes, both file1.ext and file2.ext exist
  ) else (
    echo No, both file1.ext and file2.ext not exist
  )
) else (
  If exist file2.ext (
    echo file1.ext does NOT exist but file2.ext does exist
  )
)

要检查 File2.ext 是否存在并且 file1.ext 是否存在,则:

if exist file1.ext (
  if not exist file2.ext (
     echo file1.ext does exist but file2.ext does NOT exist
  )
)

Else 关键字的位置很重要!

阅读更多:

答案2

您不需要if检查您的文件是否存在:

1.替换if exist && file1 if exist file2dir /w file1 file2

dir /w file1.ext file2.ext
  • 观察:1输出:

在此处输入图片描述

2.如果任何一个或两个文件不存在,则抑制任何可能的错误,并将命令的输出重定向dirfindstr

2>nul dir /w file1.ext file2.ext | findstr /i "file1.ext.*file2.ext" ... 
  • 观察:2使用以下方法抑制任何可能的错误2>nul并使用以下方式重定向输出|

3.使用运算符:

  • findstr &&处理return 0file1.ext 和 file2.ext 同时存在的情况
  • findstr ||处理return non 0file1.ext 或 file2.ext (或两者)不存在的情况
2>nul dir /w file1.ext file2.ext | findstr /i "file1.ext.*file2.ext" && echo\yEp! || echo\nOp!

  • 观察:3如果findstr不区分大小写(大写字母 | 小写字母),请使用/i,因为字符串在同一行上的文件名之间有一些空格,请使用.um 或更多*字符
... | findstr /i "file1.ext.*file2.ext" && ... 

  • 可能的情况/结果findstr
:: Exist file1.ext == True
:: Exist file2.ext == True
:: Results => Return "0" == echo\yEp!

:: Exist file1.ext == False
:: Exist file2.ext == False
:: Results => Return non "0" == echo\nOp!

:: Exist file1.ext == True
:: Exist file2.ext == False
:: Results => Return non "0" == echo\nOp!

:: Exist file1.ext == False
:: Exist file2.ext == True
:: Results => Return non "0" == echo\nOp!

for当需要检查多个文件并且要导入的文件不存在时,您也可以使用循环执行相同的操作,在这种情况下,您可以立即将批处理移动到:label满足此条件时,如果所有文件都存在,则将执行后续/后面的行。

@echo off 

cd /d "%~dp0"
for %%i in ("file1.ext","file2.ext","file3.ext","file4.ext","file5.ext"
)do if not exist "%%~i" echo\File "%%~i" does Not exist && goto %:^( 

:: Run more commands below, because all your files exist...

goto=:EOF 

%:^(
:: Run more commands below, because one some of your files don't exist

goto=:EOF
  • 观察:4for在循环后或标签内的相关执行之后%:^(,使用goto=:EOF将处理移至ndFFile 或另一个:label(如果适用)...
:: Run more commands below, because all your files exist...

goto=:EOF

%:^(
:: Run more commands below, because one some of your files don't exist

goto=:EOF

相关内容