如何处理文本文件的每一行并对每一行执行某些操作

时间:2018-08-17 19:32:09

标签: batch-file

如何使用批处理文件处理文本文件的每一行,并检查当前行中包含的字符串,如果为true,则执行其他操作,否则执行其他操作,然后继续下一行直到eol。 我有一个包含这样的行的文本文件:

\\.\DISPLAY2|ASPEED Graphics Family(WDDM)
\\.\DISPLAY7|NVIDIA Tesla M10
\\.\DISPLAY11|NVIDIA Tesla M10
\\.\DISPLAY15|NVIDIA Tesla M10
\\.\DISPLAY3|NVIDIA Tesla M10
\\.\DISPLAY10|ASPEED11 Graphics Family(WDDM)

如果该行包含单词“ NVIDIA”,我需要在单词“ DISPLAY”旁边获取数字 所以在这个例子中,我应该得到数字7、11、15和3

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用FOR语句将文本文档的每一行都声明为字符串。由于文本文档的格式,我们不能简单地单独使用tokens=来提取数字。

使用findstr /i "NVIDIA" "list.txt",我们可以让脚本仅读取测试为肯定的行,其中包含单词NVIDIA-其中list.txt是文本文件的名称。

使用syntax-replace,我们可以通过以下操作轻松地仅提取数字:

  1. 删除DISPLAY之前的所有内容
  2. 删除|之后的所有内容

每行中的数字将设置为变量!string!

要检查数字是否存在 true ,可以在IF语句中使用FOR语句。例如If "!string!"=="Number" ()。请记住,如果尝试在FOR循环中使用goto,它将打破循环并退出循环(因此不检查新行)。

@ECHO OFF
setlocal enabledelayedexpansion

for /f "tokens=1,2" %%G in ('findstr /i "NVIDIA" "list.txt"') do (

set string=%%G
SET string=!string:*DISPLAY=%!
SET endbit=!string:*^|=%!
call set string=%%string:!endbit!=%%

If "!string!"=="7" (
    :: Do some code for 7
    echo string equals 7!
)
If "!string!"=="11" (
    :: Do some code for 11
    echo string equals 11!
)
If "!string!"=="15" (
    :: Do some code for 15
    echo string equals 15!
)
If "!string!"=="3" (
    :: Do some code for 3
    echo string equals 3!
))

请随时根据需要更改脚本。

答案 1 :(得分:0)

尚不清楚您是否只想处理包含NVIDIA的行。

如果您这样做了,那么根据您提供的信息,您可以尝试以下操作:

@Echo Off
For /F "Tokens=2 Delims=Yy|" %%A In (
    'FindStr /I "DISPLAY[0-9]*|NVIDIA" "File.txt" 2^>Nul') Do Echo %%A
Pause

如果您要处理所有字符串内容,但仅提供有关您希望对包含NVIDIA的行进行操作的信息,则可能会有所帮助:

@Echo Off
For /F UseBackDelims^=^ EOL^= %%A In ("File.txt"
) Do Set /P "=%%A"<Nul|FindStr /I "DISPLAY[0-9]*|NVIDIA">Nul 2>&1 &&(
    For /F "Tokens=2 Delims=Yy|" %%B In ("%%A") Do Echo %%B
)||Echo Do something else
Pause

以上示例使用文本文件名File.txt,请根据需要进行调整。

相关问题