Показать полную графическую версию : [решено] определение IP и подключение шары
реализовать механизм определения адреса подсети »
как вариант - через маршрут идентификатора примыкающей сети:
@Echo Off
For /F "Tokens=2 Delims=={}" %%i In ('WMIC NICCONFIG Where IPEnabled^=TRUE Get IPSubnet /Value') Do Set SubnetMask=%%~i
For /F "Tokens=1" %%i In ('Route Print^|Find "%SubnetMask%"') Do Set SubnetIP=%%i
Echo Subnet Address: %SubnetIP% / %SubnetMask%
Pause >Nul
Loverman310
15-04-2010, 12:55
Спасибо большое за ответ!
Есть небольшая заминка - последний код выдает результат
Subnet Address: /
хотя предыдущие примеры работали отлично. Куда копать?
Куда копать? »
эта CMD-команда должна выдать маску подсети типа: IPSubnet={"255.255.255.0"}
WMIC NICCONFIG Where IPEnabled=TRUE Get IPSubnet /Value
следующий батник - присвоить это значение переменной SubnetMask и вывести на экран:
@Echo Off
For /F "Tokens=2 Delims=={}" %%i In ('WMIC NICCONFIG Where IPEnabled^=TRUE Get IPSubnet /Value') Do Set SubnetMask=%%~i
Echo %SubnetMask%
Pause >Nul
P.S. проверял на XP/2003
Loverman310
15-04-2010, 13:23
Вот, что выдает первая команда:
WMIC NICCONFIG Where IPEnabled=TRUE Get IPSubnet /Value
IPSubnet={"255.255.255.128"}
IPSubnet={""}
IPSubnet={""}
IPSubnet={""}
Видимо, одно из пустых значений и записывается в переменную. Причина тому, наличие на машине нескольких сетевых адаптеров, я полагаю.
т.к. результат исполнения(вывода на экран) батника - нулевой.
решил так:
@Echo Off
For /F "Tokens=2 Delims=={}" %%i In ('WMIC NICCONFIG Where IPEnabled^=TRUE Get IPSubnet /Value') Do Set SubnetMask=%%~i& GoTo
Continue
:Continue
For /F "Tokens=1" %%i In ('Route Print^|Find "%SubnetMask%"') Do Set SubnetIP=%%i
Echo Subnet Address: %SubnetIP% / %SubnetMask%
Pause >Nul
т.е. после нахождения первого значения и записи его в переменную - перехожу дальше по тексту программы. Нормальный ли это вариант? Не сулит ли он каких-либо граблей в будущем?
Loverman310, непустое значение может быть и не первым в списке, может так попробовать?
@Echo Off
For /F "Tokens=2 Delims=={}" %%i In ('WMIC NICCONFIG Where IPEnabled^=TRUE Get IPSubnet /Value') Do If Not "%%~i"=="" Set SubnetMask=%%~i
Echo %SubnetMask%
Pause >Nul
Loverman310
16-04-2010, 08:19
Спасибо большое! Потестируем в процессе отладки скриптов)
pedrosoft
15-05-2021, 23:22
Добрый вечер.
Подскажите пожалуйста как в следующем коде, который выдает ip при совпадении требуемой маски, добавить условие ИЛИ чтобы искать еще по одной маске:
for /f "tokens=2 delims=:(" %%i in ('ipconfig /all ^| find "IP" ^| find "10.2.16."') do set IPAdress=%%i
В принципе я могу свою задачу решить так:
for /f "tokens=2 delims=:(" %%i in ('ipconfig /all ^| find "IP" ^| find "10.2.16."') do set IPAdress=%%i
for /f "tokens=2 delims=:(" %%i in ('ipconfig /all ^| find "IP" ^| find "10.4.16."') do set IPAdress=%%i
но это как то слишком избыточно и не лаконично.
cmd нет под рукой потому проверить не могу
вместо find "10. ..." используйте findstr
вроде могло бы заработать и так:
...^| findstr 10.2.16. 10.4.16.
но для findstr "." - любой символ
можно попробовать так:
...^| findstr /g:filter.txt
но в таком случае нужен файл, в котором построчно перечислены все фильтры по которым фильтруются IP (в примере выше - filter.txt).
но т.к. это IP, вероятнее всего таки проканает первый вариант, т.к. маловероятно, чтобы в строке ipconfig отфильтрованной по IP (а еще лучше по IPv4) оказалось что-то, у которого между октетами будет что-то кроме точки.
@echo off
:: var1
set IP="192.168.1.1","192.168.1.101","192.168.1.11"
for %%i in (%IP%) do ipconfig /all|findstr /c:%%i
echo ---------------------
::var2
set "IP=/c:"192.168.1.1" /c:"192.168.1.101" /c:"192.168.1.11""
ipconfig /all|findstr %IP%
pause
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC