批处理脚本中的嵌套循环错误处理

时间:2015-01-13 11:35:10

标签: 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 )))

执行的逻辑是: 一个。如果1& 2和3& 4不同 - echo 1

湾如果1和2不同但不是3& 4 - echo 2

如果没有差异,这段代码工作正常,即没有输入"如果"条件。如果我尝试对echo 2做出要求,它实际上是显示echo 1.不确定如何纠正它。

2 个答案:

答案 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