20

我在与批处理文件所在的文件夹相同的文件夹中有文本文件。

所以我希望我的批处理文件读取文本文件的内容,并根据该文本文件的内容,我希望它执行操作。

例如,如果文本文件包含“Hello World”,则像 Start 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
4

2 回答 2

40

您应该使用 FIND 或 FINDSTR。在命令提示符下键入HELP FINDHELP FINDSTR以获取文档。FIND 非常简单可靠。FINDSTR 更强大,但也很喜怒无常。请参阅Windows FINDSTR 命令有哪些未记录的功能和限制?了解更多信息。

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

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

>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,但我更喜欢上面的语法。

于 2012-11-20T15:52:40.473 回答
2

这是另一种可行的方法。该代码使用 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
于 2019-12-07T01:26:46.940 回答