如何通过批处理脚本中的循环将空值分配给变量
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 个标记)
正如您在下面看到的,我尝试使用 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 个标记)