如何通过批处理脚本中的循环为变量赋值空值

时间:2015-04-06 15:42:45

标签: batch-file batch-processing

如下所示,我尝试使用for / f循环将第一个和最后一个“空非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

2 个答案:

答案 0 :(得分:0)

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

set count =

将ERRORLEVEL设置为1 IF var undefined,但是如果,则保持ERRORLEVEL不变 var已定义 而set count = something else会使ERRORLEVEL保持不变 (凭经验确定)

如果定义了count set count =

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

答案 1 :(得分:0)

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个令牌)