如何使用批处理文件处理文本文件的每一行,并检查当前行中包含的字符串,如果为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
答案 0 :(得分:0)
最简单的方法是使用FOR
语句将文本文档的每一行都声明为字符串。由于文本文档的格式,我们不能简单地单独使用tokens=
来提取数字。
使用findstr /i "NVIDIA" "list.txt"
,我们可以让脚本仅读取测试为肯定的行,其中包含单词NVIDIA
-其中list.txt
是文本文件的名称。
使用syntax-replace,我们可以通过以下操作轻松地仅提取数字:
DISPLAY
之前的所有内容|
之后的所有内容每行中的数字将设置为变量!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
,请根据需要进行调整。