批量循环循环
Batch Loop in loop
正在尝试获取一个批处理以输出另一个批处理文件的网络适配器名称。到目前为止这有效...
@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#="Adapter Name" 直到没有剩余的适配器。
我试过用..
set /a c=1
:sub
for /F "tokens=4*" %%c in ('echo %*') do (
set /a c=c+1
Set Adapter%c%=%%b
echo %adapter2%
)
这里有几个问题试图调用由变量组成的变量,即。%adapter%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
沮丧 >.< ,无法理解它应该如何工作。任何帮助表示赞赏。谢谢
- 跳过输出的前 3 行要容易得多
- 由于适配器名称可能包含空格,因此您使用
tokens=4
的方法无效,
使用星号来捕获下一个已解析行的其余部分 for var.
:: Q:\Test19\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:\Test19\SO_55189424.cmd
Adapter1=VirtualBox Host-Only Network
Adapter2=Ethernet
Adapter3=Ethernet 2
正在尝试获取一个批处理以输出另一个批处理文件的网络适配器名称。到目前为止这有效...
@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#="Adapter Name" 直到没有剩余的适配器。
我试过用..
set /a c=1
:sub
for /F "tokens=4*" %%c in ('echo %*') do (
set /a c=c+1
Set Adapter%c%=%%b
echo %adapter2%
)
这里有几个问题试图调用由变量组成的变量,即。%adapter%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
沮丧 >.< ,无法理解它应该如何工作。任何帮助表示赞赏。谢谢
- 跳过输出的前 3 行要容易得多
- 由于适配器名称可能包含空格,因此您使用
tokens=4
的方法无效,
使用星号来捕获下一个已解析行的其余部分 for var.
:: Q:\Test19\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:\Test19\SO_55189424.cmd
Adapter1=VirtualBox Host-Only Network
Adapter2=Ethernet
Adapter3=Ethernet 2