【问题标题】:Batch Loop in loop循环中的批处理循环
【发布时间】:2019-08-06 22:27:50
【问题描述】:

尝试获取批处理以输出另一个批处理文件的网络适配器名称。到目前为止,这有效...

@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%
)

这里有几个问题试图调用由变量组成的变量 ie.%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

沮丧 >.

【问题讨论】:

  • for /F "skip=3 tokens=4*" %a in ('netsh interface show interface') do @echo %a(从打开的cmd 提示符中尝试)
  • 谢谢约瑟夫兹

标签: loops batch-file netsh


【解决方案1】:
  • 跳过输出的前 3 行要容易得多
  • 由于适配器名称可能包含空格,因此您使用 tokens=4 的方法不起作用,
    使用星号在下一个 for var 中捕获已解析行的其余部分。

:: 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

【讨论】:

  • 这太棒了,谢谢。最后一行是如何工作的?这不是我想使用 set 函数的方式。
  • 不带等号的设置输出所有匹配开头的变量。
  • 我们可以将它与任何通配符一起使用还是只匹配开头? IE。如果你有 Number、Variable1 SecondVarrible1、Variable2 SecondVarrible2 的 Vars,你可以调用 "Set %*Varible!Number!% 吗?
  • 对不起,它只匹配开头。
猜你喜欢
  • 1970-01-01
  • 2017-06-15
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多