2

我有一个批处理文件,我想比较两个文本文件(test1.txt 和 test2.txt)的内容。我希望它搜索 test1.txt 中的每个条目并查找 test2.txt 中的每个条目并告知是否已找到该条目。我一直在寻找一些输入,但似乎无法提出任何有用的信息。

例如test1.txt包含:红蓝绿橙

并且 test2.txt 包含:红色蓝色橙色

理想情况下,我希望它告诉我它找不到“绿色”...

我在想它应该是这样的:

@ECHO OFF

FOR /F %%A IN (C:\test1.txt) DO (
    FIND /I %%A C:\test2.txt
    IF %ERRORLEVEL% EQU 0 (ECHO Sring found!) ELSE (ECHO string not found!)
)

...但这并不能证明对我有多大帮助。任何帮助将不胜感激!

4

2 回答 2

2

您的代码有两个问题:

1) FIND 命令需要引用搜索字符串。

2)你的逻辑几乎是正确的。%ERRORLEVEL%解析行时,问题被扩展,并且整个带括号的 DO() 块被解析一次。所以它总是扩展为在 FOR 循环执行之前存在的值——而不是你想要的。

有许多简单的解决方案。

使用延迟扩展

@ECHO OFF
setlocal enableDelayedExpansion
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt
  IF !ERRORLEVEL! EQU 0 (ECHO Sring found^^!) ELSE (ECHO string not found^^!)
)

使用 IF ERRORLEVEL(如果 errorlevel 为 1 或更大,则 IF ERRORLEVEL 1 为真)

@ECHO OFF
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt
  IF NOT ERRORLEVEL 1 (ECHO Sring found!) ELSE (ECHO string not found!)
)

使用&&||条件运算符

@ECHO OFF
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt && (ECHO Sring found!) || (ECHO string not found!)
)
于 2012-12-13T20:08:00.003 回答
1

您可以使用findstr参数 /V 打印不包含匹配项的行,使用 /G 从文件中读取搜索字符串。正如 dbenham 建议的那样,最好还添加 /L 选项以强制进行文字搜索,如下所示:

findstr /L /V /G:text2.txt text1.txt

这将打印所有text1.txt不存在的行text2.txt

于 2012-12-13T21:24:36.110 回答