我需要帮助解析Windows批处理文件中的字符串

时间:2017-01-25 08:26:43

标签: batch-file windows-scripting

我试图弄清楚如何使用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.

2 个答案:

答案 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!
)