Показать полную графическую версию : Передача значения каждой строки в переменную
epoddubniy
27-05-2021, 12:55
Здравствуйте.
Помогите пожалуйста найти ошибку
Выполняю код:
for /f "tokens=*" %%a in ('netsh interface ipv4 show config ^| findstr /r "IP-адрес.*192.168.*"') do (for /f "tokens=2 delims=адрес " %%b in ("%%a") do set ip1=%%b ip2=%%c ip3=%%d)
в результате вывод:
set ip1=192.168.220.1 set ip2=%с set ip3=%d
всего - три строки. Хотел бы, чтобы каждая из строк сохранилась в переменную. Не получается.
megaloman
27-05-2021, 13:46
@Echo Off
cls
>nul chcp 437
Set "Find=^ *IP Address: *192\.168\..*$"
Set /A N=0
For /f "usebackq delims=" %%i In (`netsh interface ipv4 show config ^| findstr.exe /R /I /C:"%Find%"`) Do (
Set "IP=%%i"
Call Set /A N+=1
Call Set "@ip%%N%%=%%IP:* =%%"
)
Set "@ip"
pause
Exit /B
epoddubniy
27-05-2021, 14:29
Спасибо, megaloman,
Скажите пожалуйста, можно ли как-то в Ваш код добавить вот это
for /f "tokens=*" %c in ('netsh interface ipv4 show config ^| findstr /r "Настройка.*интерфейса.*Eth.*"') do (for /f "usebackq tokens=3 delims= " %d in ('%c') do set interface=%d)
чтобы потом можно было воспользоваться полученными переменными %interface% и %@ip1%
в командах
netsh interface ip set address name=%interface% static %@ip1% 255.255.248.0 192.168.137.15
netsh interface ip set dns %interface% static 192.168.137.16
netsh interface ip add dns %interface% 192.168.137.17
@echo off
for /f "skip=2 tokens=4" %%a in ('netsh interface show interface') do (
echo "%%a"
for /f "tokens=*" %%i in ('netsh interface ip show addresses name^="%%a"') do call :# "%%a" "%%i"
echo:
)
pause& exit
:#
for /f "tokens=1,2 delims=:" %%a in ("%~2") do (
for /f "tokens=*" %%i in ("%%b") do (
echo %%a|>nul find "DHCP включен" && echo:DHCP включен=%%i
echo %%a|>nul find "IP-адрес" && echo:IP-адрес=%%i
echo %%a|>nul find "Префикс подсети" && echo:Префикс подсети=%%i
echo %%a|>nul find "Основной шлюз" && echo:Основной шлюз=%%i
echo %%a|>nul find "Метрика шлюза" && echo:Метрика шлюза=%%i
echo %%a|>nul find "Метрика интерфейса" && echo:Метрика интерфейса=%%i
)
)
exit /b
megaloman
28-05-2021, 07:30
@Echo Off
cls
>nul chcp 866
Set "FindInf=^Настройка интерфейса .*$"
Set "FindIP=^ *IP-адрес *192\.168\..*$"
rem Set "FindIP=^ *IP-адрес *.*$"
Set /A N=0
For /f "usebackq delims=" %%s In (`netsh interface ipv4 show config`) Do (
For /f "usebackq delims=" %%f In (`Echo %%s^| findstr.exe /R /I /C:"%FindInf%"`) Do Set "Inf=%%f"
For /f "usebackq delims=" %%i In (`Echo %%s^| findstr.exe /R /I /C:"%FindIP%"`) Do (
Set "IP=%%i"
Call Set /A N+=1
Call Set "@ip%%N%%=%%IP:* =%%"
Call Set "interface%%N%%=%%Inf:* "=%%
)
)
Echo %N%
Set "@ip"
Set "interface"
Echo "%interface1%" %@ip1%
pause
Exit /B
Сохранить код в файл в 866 кодировке
epoddubniy
28-05-2021, 16:24
Set "FindIP=^ *IP-адрес *192\.168\..*$" »
megaloman, объясните пожалуйста, какие возможности дает птичка в названии переменной, для чего в конце стоит *$, а октеты разделяются дополнительно "\"?
megaloman
28-05-2021, 17:27
Читайте findstr /?
У меня применяется в поиске регулярные выражения
Познакомьтесь с регулярными выражениями, например здесь, (https://ru.m.wikibooks.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0 %BD%D0%B8%D1%8F) или найдите еще что-нибудь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.