как присвоить пустое значение переменной через цикл в пакетном скрипте

как вы можете видеть ниже, я пытаюсь присвоить первое и последнее «пустые не IP» значения переменной, используя цикл for /f.

по какой-то причине цикл не анализирует пустые значения 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

person rosho    schedule 06.04.2015    source источник


Ответы (2)


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-й маркер)

person MC ND    schedule 06.04.2015
comment
работает как шарм! так что для всех... это рабочее решение - person rosho; 08.04.2015

Интересное наблюдение - но не совсем точное.

установить количество =

установит ERRORLEVEL в 1, если переменная не определена, но оставит ERRORLEVEL без изменений, если переменная определена, тогда как set count=something else оставит ERRORLEVEL неизменным независимо (определено эмпирическим путем)

если определен счетчик, установите count=

казалось бы, чтобы остановить проблему, с которой вы столкнулись.

person user2782717    schedule 06.04.2015