我试图弄清楚如何使用Windows批处理脚本提取与英特尔(R)以太网连接(3)I218-V 网络关联的LAN网络的名称[以太网1] 。任何帮助将不胜感激。
Name : Ethernet 2
Description : ASIX AX88178A USB 2.0 to Gigabit Ethernet Adapter
GUID : 0ea309e6-b450-460e-946e-4f22abd4758b
Physical Address : 70-B3-D5-39-25-8B
State : Network cable unplugged
Name : Ethernet 3
Description : ASIX AX88178A USB 2.0 to Gigabit Ethernet Adapter #2
GUID : 086fbb18-2cd4-4ce6-b286-74b2f66b3288
Physical Address : 70-B3-D5-39-25-8C
State : Network cable unplugged
Name : Ethernet 1
Description : Intel(R) Ethernet Connection (3) I218-V
GUID : b29c769f-ef3a-47c8-a709-474c11137df8
Physical Address : F4-4D-30-65-73-48
State : Connected. Network does not support authentication.
答案 0 :(得分:2)
使用for
循环来解析文本文件(或命令输出),在里面使用一个小技巧来记住前一行。如果当前行是您的搜索字符串,则记住的前一行是您想要的字符串。
@echo off
setlocal enabledelayedexpansion
set "prev="
for /f "tokens=2 delims=:" %%a in ('type t.txt^|findstr "Name Description"') do (
REM here %%a is the current line and !prev! is the previous line
if "%%a"==" Intel(R) Ethernet Connection (3) I218-V" set result=!prev:~1!
set "prev=%%a"
)
echo Name: %result%
注意:第二个标记有一个前导空格。 ~1
删除了此内容。
答案 1 :(得分:0)
我认为这种方法更易于修改以实现其他类似限制,例如处理更多组,测试每组中的多个值或搜索和所需值之间的更多行等等。
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1,2*" %%a in ('findstr "Name Description" input.txt') do (
set "%%a=%%c"
if "!Description!" equ "Intel(R) Ethernet Connection (3) I218-V" echo !Name!
)