Batch如果findstr失败,则无法回显循环变量

时间:2017-05-17 22:49:59

标签: windows batch-file for-loop findstr

我正在尝试创建一个字符串来搜索文本文件中的每一行,如果有匹配则它什么都不做,但是如果它找到没有匹配的行,它会回显到输出文本文件。

@echo off
setlocal enabledelayedexpansion 
for /f "tokens=* delims= " %%a in (C:\listtocheck.txt) do (
    findstr /i %%a C:\master.txt
    if %errorlevel%==1 (echo !%%a! >> "c:\results.txt")
    )

我不知道如何才能完成这项工作,并且无法找到任何好的工作示例来参考。

MASTER FILE
KB3216916   
KB3214051  
KB4012373


LISTTOCHECK FILE
HotFixID   
KB2849697  
KB2849696  
KB2841134  
KB2670838  

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

要使您的批处理工作,您可以使用而不是if %errorlevel%==1

  1. if errorlevel 1请参阅if /?
  2. if !errorlevel!==1请参阅delayed expansion
  3. 但我建议改用conditional execution。将pathes更改为当前目录。

    @echo off
    Type Nul > results.txt
    for /f "tokens=* delims= " %%a in (listtocheck.txt
    ) do findstr /i "^%%a" master.txt >Nul 2>&1 ||(>>"results.txt" echo %%a)
    Type results.txt
    

    另一种更简单的方法是使用反转顺序的findstr的/ V + / G选项:

    > findstr /i /V /G:Master.txt LISTTOCHECK.txt >results.txt
    

    results.txt的示例输出:

    HotFixID
    KB2849697
    KB2849696
    KB2841134
    KB2670838