我可以在batch file中使用FIND命令使用variables作为searchstring吗?

我有一个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.txttext1.txt中不存在的所有行