Пакетная петля в петле - PullRequest
1 голос
/ 15 марта 2019

пытается получить пакет для вывода имен сетевых адаптеров для другого пакетного файла.пока это работает ...

@echo off
set ignore=true
for /F "delims=" %%a in ('netsh interface show interface')do call :Sub %%a
goto :eof

:sub
if not "%adapter1%" EQU "" goto :2
set Line=%*
if "%Line:~0,10%" EQU "----------" (set ignore=false & goto :eof)
if %ignore% EQU true goto :eof
for /F "tokens=4*" %%b in ('echo %*') do set Adapter1=%%b
echo %Adapter1%
goto :eof
)

:2
for /F "tokens=4*" %%c in ('echo %*') do set Adapter2=%%c
echo %adapter2%
pause

Но есть ли способ зациклить вторую часть, чтобы вывод продолжался с Adapter # = "Имя адаптера", пока не осталось адаптеров.

Я пытался использовать ..

set /a c=1
    :sub
for /F "tokens=4*" %%c in ('echo %*') do (
set /a c=c+1
Set Adapter%c%=%%b
echo %adapter2%
)

пару проблем здесь, пытаясь вызвать переменную, состоящую из переменных, т.е..% Adaptor% c %%

, а другой -понятия не имею, как вернуться к следующей строке.

Я понимаю, что мог бы продолжать расширять это, но это было бы ужасно.

@echo off
set ignore=true
for /F "delims=" %%a in ('netsh interface show interface')do call :Sub %%a
goto :eof

:sub
if not "%adapter2%" EQU "" goto :3
if not "%adapter1%" EQU "" goto :2
set Line=%*
if "%Line:~0,10%" EQU "----------" (set ignore=false & goto :eof)
if %ignore% EQU true goto :eof
for /F "tokens=4*" %%b in ('echo %*') do set Adapter1=%%b
echo %Adapter1%
goto :eof
)

:2
for /F "tokens=4*" %%c in ('echo %*') do set Adapter2=%%c
echo %adapter2%
pause

:3
for /F "tokens=4*" %%c in ('echo %*') do set Adapter3=%%c
echo %adapter3%
pause

Разочарованный>. <, не могу получитьмоя голова вокруг того, как это должно работать.Любая помощь приветствуется.Спасибо </p>

1 Ответ

2 голосов
/ 15 марта 2019
  • Гораздо проще пропустить первые 3 строки вывода
  • Так как имя адаптера может содержать пробелы, ваш подход с tokens=4 не может работать,
    используйте звездочку, чтобы поймать остаток от проанализированной строки в следующей для переменной.

:: Q:\Test\2019\03\15\SO_55189424.cmd
@Echo off&SetLocal EnableDelayedExpansion

Set Cnt=0
for /f "skip=3 tokens=1-3*" %%A in ('
    netsh interface show interface
') Do (
    Set /A Cnt+=1
    Set "Adapter!Cnt!=%%D"
)
Set Adapter

Пример вывода:

> Q:\Test\2019\03\15\SO_55189424.cmd
Adapter1=VirtualBox Host-Only Network
Adapter2=Ethernet
Adapter3=Ethernet 2
...