Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Определить компьютер в сети, до которого самый длинный маршрут (http://forum.oszone.net/showthread.php?t=324152)

namsma 24-02-2017 00:23 2714358

Определить компьютер в сети, до которого самый длинный маршрут
 
Как вывести максимальное значение метрики(последняя колонка из вывода команды route print)?
Файл - .bat.

То eсть нужно опрeдeлить компьютeр в сeти, до которого самый длинный маршрут.
Буду благодарен за помощь. Если кто-то осилит, буду очень признателен.

Скрин

namsma 27-02-2017 15:14 2715143

изменил условия на более понятные

megaloman 27-02-2017 19:11 2715183

namsma, для каких сетевых адресов? Вы показали скриншот. Что по этому скриншоту должно быть в ответе?

Elven 28-02-2017 12:07 2715338

megaloman, если моя быть понимать правильно нужно найти максимальное значение метрики из вывода route print и вывести строки, у которых метрика будет равна этому значению.
в ответе должен получится вывод, судя по скриншоту, соответсвующий чему-то вот такому:
Код:

route print | findstr 306$
но это в том случае, если максимальное значение метрики 306. namsma, я так понимаю проблема именно определить какое значение является максимальным, нет?

alpap 28-02-2017 16:28 2715407

так?
Код:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=4,5" %%a in ('route print^|findstr /rc:" [0-9]*$"') do if !max! lss %%b set max=%%b& set "comp=%%a"
echo Максимальное число метрики: %max% для %comp%
pause>nul


Iska 28-02-2017 19:19 2715466

Может быть, будет проще сюда sort.exe привязать?

megaloman 28-02-2017 20:54 2715488

Iska, ИМХО, Наверное лучше. Но еще надо отсеять ненужные значения. По моему, сетевой адрес 255.255.255.255 не интересен. Не хватает данных для решения. ИМХО, надо искать не только максимальную метрику, но и отсеивать ненужные значения, плюс не ясно: что делать, когда максимальные метрики встречаются несколько раз.

Iska 28-02-2017 21:01 2715490

Цитата:

Цитата megaloman
Не хватает данных для решения. »

Соглашусь. Именно так.

megaloman 28-02-2017 22:41 2715524

Нарисовал корявый пример: отсортировал маршруты по убыванию метрик. Могу (пока не хочу) отсечь все значения меньше максимального, но после этого не знаю, что дальше делать.
Код:

@Echo Off
cls

chcp 437 >nul
SetLocal EnableExtensions EnableDelayedExpansion

Call :InSort "%~dpnx0.txt"

Echo Network Destination        Netmask          Gateway      Interface  Metric

For /F "usebackq  tokens=1,2,3,4,5,6 delims= " %%i In (`More "%~dpnx0.txt"^|Sort /R`) Do (
        Set "SS=                %%j" &Set "S=!SS:~-17!"
        Set "SS=                %%k" &Set "S=!S!!SS:~-17!"
        Set "SS=                %%l" &Set "S=!S!!SS:~-17!"
        Set "SS=                %%m" &Set "S=!S!!SS:~-17!"
        Set "SS=                %%n" &Set "S=!S!!SS:~-7!"
        Echo !S!
)
Del "%~dpnx0.txt"
pause
goto :Eof

:InSort
>%1 (
        Set /A Log=0
        For /F "usebackq tokens=1,2,3,4,5,6 delims= " %%i IN (`route print -4`) DO (
                If "%%j"=="" Set /A Log=0
                If Not !Log! EQU 0 (
                        Set /a MM=10000+%%m
                        Echo !MM! %%i %%j %%k %%l %%m %%n
                )
                If "%%n"=="Metric" Set /A Log=1
        )
)
goto :Eof

Вот все маршруты, соответствующие максимальной метрике.
Код:

@Echo Off
cls

chcp 437 >nul
SetLocal EnableExtensions EnableDelayedExpansion

Set /A Max=-1

Call :OutPrint "Max"

Echo Network Destination        Netmask          Gateway      Interface  Max Metric
Call :OutPrint "Max"

Pause
GoTo :Eof

:OutPrint
        Set /A LMax=!%~1!
        Set /A Log=0
        For /F "usebackq tokens=1,2,3,4,5,6 delims= " %%i IN (`route print  -4`) DO (
                If "%%j"=="" Set /A Log=0
                If Not !Log! EQU 0 (
                        If %LMax% LSS 0 (
                                If !%~1! LSS %%m Set /A %~1=%%m
                        ) Else (
                                If  %%m GEQ !%~1! (
                                        Set "SS=                %%i" &Set "S=!SS:~-17!"
                                        Set "SS=                %%j" &Set "S=!S!!SS:~-17!"
                                        Set "SS=                %%k" &Set "S=!S!!SS:~-17!"
                                        Set "SS=                %%l" &Set "S=!S!!SS:~-17!"
                                        Set "SS=                %%m" &Set "S=!S!!SS:~-11!"
                                        Echo !S!
                                )
                        )
                )
                If "%%n"=="Metric" Set /A Log=1
        )
goto :Eof

]


Время: 00:34.

Время: 00:34.
© OSzone.net 2001-