如下所示,我尝试使用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
答案 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个令牌)