如何通过批处理脚本中的循环将空值分配给变量

how to assign an empty value to a variable via loop in batch script

正如您在下面看到的,我尝试使用 for /f 循环将第一个和最后一个 "empty non IP" 值分配给变量。

出于某种原因,循环不解析空 IP 值,只选择中间值

C:\Windows\System32>ipconfig | find "Default"
   Default Gateway . . . . . . . . . :
   Default Gateway . . . . . . . . . : 192.168.188.2
   Default Gateway . . . . . . . . . :

这是我的代码...非常感谢!!

@echo off
SETLOCAL EnableDelayedExpansion
set /a count=0
    ipconfig | find "Default Gateway" > %temp%\TEMPIP.txt
    for /f "tokens=12 delims=: " %%a in (%temp%\TEMPIP.txt) do (


    set /a count+=1
    echo %%a > %temp%\TEMP.txt
    set gw=%%a
    set gwvar!count!=!gw!

 )

    echo now...
    echo.
    echo var1 is... %gwvar1%
    echo var2 is... %gwvar2%

    pause

有趣的观察 - 但不太准确。

设置计数=

如果变量未定义,将把 ERRORLEVEL 设置为 1,但如果 变量已定义 而 set count=something else 无论如何都会保持 ERRORLEVEL 不变 (根据经验确定)

如果定义计数设置计数=

似乎可以解决您遇到的问题。

Default Gateway . . . . . . . . . : 192.168.188.2
^       ^       ^ ^ ^ ^ ^ ^ ^ ^ ^   ^
1       2       3 4 5 6 7 8 9 0 11  12

您的代码要求令牌号 12。唯一具有 12 个令牌的行是具有 ip 地址的行,因此,do 子句中的代码不会针对其他两行执行没有要处理的令牌。

您可以使用

set "count=0"
for /f "tokens=11,* delims=: " %%a in ('
    ipconfig ^| find "Default"
') do (
    set /a "count+=1"
    set "gwvar!count!=%%b"
)

set gwvar

%%b* 第 11 个标记后的其余部分)用作 %%a 将保留最后一个点(第 11 个标记)