Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Нарисовал корявый пример: отсортировал маршруты по убыванию метрик. Могу (пока не хочу) отсечь все значения меньше максимального, но после этого не знаю, что дальше делать.
Код: Выделить весь код
@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
]

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-02-2017 в 23:55.


Отправлено: 22:41, 28-02-2017 | #9