如何在批处理中检查文本文件是否包含特定文本?

24

我有一个文本文件,它与我的批处理文件在同一个文件夹中。

因此,我希望我的批处理文件读取文本文件的内容,并根据文本文件的内容执行某些操作。

例如,如果文本文件包含“Hello World”,则执行像启动VLC这样的操作;如果不包含“Hello World”,则执行其他操作。

文本内容将自动更新。

以下是我迄今为止编写的批处理代码,它可以在屏幕上输出文本文件的内容。

@echo off
for /f "tokens=*" %%a in (log.txt) do call :processline %%a

pause
goto :eof

:processline
echo line=%*

goto :eof

:eof

我认为这个问题包含了你所需要的信息。 - zbrunson
2个回答

46

您应该使用FIND或FINDSTR。在命令提示符中键入HELP FINDHELP FINDSTR以获取文档。FIND非常简单可靠。FINDSTR更加强大,但也更加反应灵敏。有关更多信息,请参见Windows FINDSTR命令的未记录功能和限制是什么?.

您不关心两个命令的输出,因此可以将输出重定向到nul。

如果找到字符串,则两个命令都将ERRORLEVEL设置为0,如果未找到字符串,则设置为1。您可以使用&&||运算符根据字符串是否被发现有条件地执行代码。

>nul find "Hello World" log.txt && (
  echo "Hello World" was found.
) || (
  echo "Hello World" was NOT found.
)

>nul findstr /c:"Hello World" log.txt && (
  echo "Hello World" was found.
) || (
  echo "Hello World" was NOT found.
)

你也可以在IF语句中测试ERRORLEVEL,但我更喜欢上面的语法。


嗨,我有一个问题希望你能帮助我,除了log.txt之外,是否有一种方法可以放置URL,它只会有一个数据链接。谢谢。 - Mowgli
对我来说似乎不起作用。(找不到Hello World) - Cestarian
@Cestarian - 不好意思!我向你保证这两个命令都是完全正常的。你要么输入有误,要么就是没有正确使用该命令。 - dbenham
@dbenham 是我自己的错,我看错了输出(愚蠢的命令提示符,我更习惯于bash shell)。如果可以的话,我会撤回我给这个的负评,但是它说除非被编辑,否则无法更改。 - Cestarian

4

这里提供了另一种可行的方法。代码使用findstr命令在文本文件中查找特定字符串...如果找到,则返回错误级别为0;如果未找到,则返回错误级别为1。

findstr /m "Findme" Log.txt >Nul
if %errorlevel%==0 (
echo "Findme" was found within the Log.txt file!
)

if %errorlevel%==1 (
echo "Findme" wasn't found within the Log.txt file!
)
pause

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接