PDA

Показать полную графическую версию : [решено] определение IP и подключение шары


Страниц : 1 2 [3]

amel27
15-04-2010, 10:54
реализовать механизм определения адреса подсети »
как вариант - через маршрут идентификатора примыкающей сети:


@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: /


хотя предыдущие примеры работали отлично. Куда копать?

amel27
15-04-2010, 13:16
Куда копать? »
эта 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


т.е. после нахождения первого значения и записи его в переменную - перехожу дальше по тексту программы. Нормальный ли это вариант? Не сулит ли он каких-либо граблей в будущем?

amel27
15-04-2010, 16:16
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
но это как то слишком избыточно и не лаконично.

Elven
17-05-2021, 10:07
cmd нет под рукой потому проверить не могу
вместо find "10. ..." используйте findstr
вроде могло бы заработать и так:
...^| findstr 10.2.16. 10.4.16.
но для findstr "." - любой символ
можно попробовать так:
...^| findstr /g:filter.txt
но в таком случае нужен файл, в котором построчно перечислены все фильтры по которым фильтруются IP (в примере выше - filter.txt).

но т.к. это IP, вероятнее всего таки проканает первый вариант, т.к. маловероятно, чтобы в строке ipconfig отфильтрованной по IP (а еще лучше по IPv4) оказалось что-то, у которого между октетами будет что-то кроме точки.

alpap
17-05-2021, 14:13
@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