我有一个batch file,我想比较两个文本文件(test1.txt和test2.txt)的内容。 我希望它能够searchtest1.txt中的每个条目,并在test2.txt中查找每个条目,并通知该条目是否已被find。 我一直在寻找一些input,但似乎无法提供任何有用的东西。
例如,test1.txt包含:红蓝绿橙色
而test2.txt包含:红色的蓝色橙色
理想情况下,我想告诉我它不能find“绿色”…
我在想这应该是这样的:
@ECHO OFF FOR /F %%A IN (C:\test1.txt) DO ( FIND /I %%AC:\test2.txt IF %ERRORLEVEL% EQU 0 (ECHO Sring found!) ELSE (ECHO string not found!) )
…但这并不能certificate对我有很大的帮助。 任何帮助将不胜感激!
你的代码有两个问题:
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(如果错误级别为1或更高,则IF ERRORLEVEL 1为true)
@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!) )
您可以使用参数/ V的findstr打印不包含匹配的行,并使用/ G从文件中读取搜索字符串。 正如dbenham所建议的那样,最好还是添加/ L选项来强制执行文字搜索,如下所示:
findstr /L /V /G:text2.txt text1.txt
这将打印text1.txt中text1.txt中不存在的所有行