Batch file 批处理脚本中的嵌套循环错误处理
我已经为批处理脚本中的文件比较编写了一个嵌套循环Batch file 批处理脚本中的嵌套循环错误处理,batch-file,Batch File,我已经为批处理脚本中的文件比较编写了一个嵌套循环 fc 1.txt 2.txt | findstr "no diff" IF %ERRORLEVEL% EQU 1 ( fc 3.txt 4.txt | findstr "no diff" IF %ERRORLEVEL% EQU 1 ( echo 1 goto exit ) ELSE ( echo 2 goto exit ))) 要执行的逻辑是: A.如果1&2和3&4不同-回显1 b。如果1和2不同,但不是3和4-回波2 如果没有差异
fc 1.txt 2.txt | findstr "no diff"
IF %ERRORLEVEL% EQU 1 (
fc 3.txt 4.txt | findstr "no diff"
IF %ERRORLEVEL% EQU 1 (
echo 1
goto exit
) ELSE (
echo 2
goto exit )))
要执行的逻辑是:
A.如果1&2和3&4不同-回显1
b。如果1和2不同,但不是3和4-回波2
如果没有差异,即未进入“如果”条件,则此代码工作正常。若我试着去做echo 2的需求,它实际上是在显示echo 1。不确定如何更正此问题。当解析器准备行或行块(括号中的行)时,在开始执行代码之前,所有变量读取都将替换为变量中的值,因此,您的
%errorlevel%
在第一个if
中的检查将使用解析所有块时使用的相同errorlevel值
您可以使用延迟扩展(setlocal enabledelayedexpansion
)解决此问题,并在需要时将变量中的读取操作从%var%
替换为!瓦尔代码>,向解析器指示读取操作必须延迟到执行命令为止
或者,您可以将检查errorlevel值的方法从如果%errorlevel%equ…
更改为如果errorlevel n
,如果errorlevel
值等于或大于指示的n
值,则为真
在这种情况下,它使用的语言构造不涉及变量读取操作,并且在解析时不受值替换的影响
fc 1.txt 2.txt >nul
if errorlevel 1 (
fc 3.txt 4.txt >nul
if errorlevel 1 (
echo 1
) else (
echo 2
)
)
这里有另一种方法
fc 1.txt 2.txt | findstr "no diff" && goto :done
fc 3.txt 4.txt | findstr "no diff" && (echo 2 & goto :done)
echo 1
:done