我已经在批处理脚本中编写了一个用于文件比较的嵌套循环。
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 )))
执行的逻辑是: 一个。如果1& 2和3& 4不同 - echo 1
湾如果1和2不同但不是3& 4 - echo 2
如果没有差异,这段代码工作正常,即没有输入"如果"条件。如果我尝试对echo 2做出要求,它实际上是显示echo 1.不确定如何纠正它。
答案 0 :(得分:1)
当解析器准备行或行块(括号中的行)时,所有变量读取都被变量中的值替换开始执行代码,因此您的{{1在第一个%errorlevel%
内部检查将使用解析所有块时使用的相同errorlevel值。
您可以使用延迟扩展(if
)来解决它,并在需要时将setlocal enabledelayedexpansion
中的读取操作替换为%var%
,向解析器指示读取操作必须是延迟到执行命令。
或者您可以更改检查错误级别值的方式,从!var!
转换为if %errorlevel% equ ...
,如果if errorlevel n
值等于或大于指示的{{1},则会为真价值。
在这种情况下,它使用的语言构造不涉及变量读取操作,并且不会在分析时受到值替换的影响
errorlevel
答案 1 :(得分:1)
这是另一种方法。
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