如果 findstr 失败,批处理无法回显循环变量

Batch Unable to echo for loop variable if findstr fails

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

@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  

任何帮助将不胜感激

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

  1. if errorlevel 1 参见 if /?
  2. if !errorlevel!==1 参见 delayed expansion

但我建议改用 conditional execution。更改了当前目录的路径。

@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