2017-01-25 6 views
-1

Я пытаюсь выяснить, как извлечь только имя [Ethernet 1] сети LAN, связанное с подключением Ethernet (44) используя оконный пакетный скрипт. Любая помощь будет оценена.Мне нужна помощь в синтаксическом анализе строк в оконном пакете

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. 
+1

@jeb не уверен, если дубликат! Это необходимо объединить две строки (где Описание eq Intel-foo) -> получить строку выше и значение этого! Я бы не видел это как точный дубликат! – geisterfurz007

+0

Теперь мы знаем, что вы пытаетесь сделать, но вы не должны забывать задавать конкретный вопрос, так как StackOverflow - это * вопрос * и портал ответов. Пожалуйста, прочитайте [тур] и узнайте [спросите]! Из какой команды поступают эти данные? – aschipfl

ответ

2

Используйте for цикл для разбора Textfile (или вывод команды), внутри использовать маленькую хитрость, чтобы вспомнить предыдущую строку. Если текущая строка является вашей поисковой строкой, то сохраненная предыдущая строка - это требуемая строка.

@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 удаляет это.

+0

@ geisterfurz007: отлично работает для меня ('t.txt' содержит данные, указанные в вопросе) – Stephan

+0

Nevermind ... Я идиот. Во время копирования я забыл соответствующие данные. Хороший трюк! – geisterfurz007

+1

Не более эффективное использование в теме для цикла: ('findstr "Название Описание" t.txt') – user2956477

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