Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 我可以在批处理文件中使用FIND命令将变量用作搜索字符串吗?_Windows_Variables_For Loop_Batch File_Find - Fatal编程技术网

Windows 我可以在批处理文件中使用FIND命令将变量用作搜索字符串吗?

Windows 我可以在批处理文件中使用FIND命令将变量用作搜索字符串吗?,windows,variables,for-loop,batch-file,find,Windows,Variables,For Loop,Batch File,Find,我有一个批处理文件,我想比较两个文本文件(test1.txt和test2.txt)的内容。我希望它搜索test1.txt中的每个条目,查找test2.txt中的每个条目,并告知是否找到了该条目。我一直在四处寻找一些信息,但似乎找不到任何有用的东西 例如,test1.txt包含: 红色 蓝色 绿色 橙色的 test2.txt包含: 红色 蓝色 橙色的 理想情况下,我希望它告诉我它找不到“绿色” 我想应该是这样的: @ECHO OFF FOR /F %%A IN (C:\test1.txt) DO

我有一个批处理文件,我想比较两个文本文件(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!)
)
findstr /L /V /G:text2.txt text1.txt

。。。但事实证明,这对我没有多大帮助。任何帮助都将不胜感激

您的代码有两个问题:

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或更高,则ERRORLEVEL 1为真)

使用
&&
|
条件运算符

@ECHO OFF
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt && (ECHO Sring found!) || (ECHO string not found!)
)

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

@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!)
)
findstr /L /V /G:text2.txt text1.txt

这将打印
text1.txt
中不在
text2.txt

+1中的所有行-您可能应该添加/L选项以强制文字搜索。如果/L选项不存在,并且text2.txt中的第一行包含一个元字符,如
,则所有搜索都将被视为正则表达式。@dbenham是的,您是对的!我把你的建议加到了答案上。。谢谢