这个问题更让人好奇,但是 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 file2
为dir /w file1 file2
dir /w file1.ext file2.ext
- 观察:1输出:
2.如果任何一个或两个文件不存在,则抑制任何可能的错误,并将命令的输出重定向dir
到findstr
2>nul dir /w file1.ext file2.ext | findstr /i "file1.ext.*file2.ext" ...
- 观察:2使用以下方法抑制任何可能的错误
2>nul
并使用以下方式重定向输出|
3.使用运算符:
findstr &&
处理return 0
file1.ext 和 file2.ext 同时存在的情况findstr ||
处理return non 0
file1.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
- 观察:4
for
在循环后或标签内的相关执行之后%:^(
,使用goto=:EOF
将处理移至埃nd哦FFile 或另一个: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
进一步阅读:
[√]目录 /?
[√]查找字符串 /?
[√]bat 文件中的重定向