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

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

s.i.p.a 10-04-2018 21:49 2808187

Остановка цикла. Отправка почты через Blat
 
Всем привет. столкнулся с проблемой. Помогите, если можете.

Понадобился скрипт, который будет проверять маршруты на сервере и отправлять на почту сообщение внутри которого будет маршрут и тема письма будет взята из маршрута.

Код:

for /f "tokens=3-4" %%a in ('route print ^| find " 0.0.0.0"') do blat - -to user1@tut.by -server 192.168.33.200 -f user2@tut.by -u user2@tut.by -pw user2 -subject "%%a - %%b" -body "%%a - %%b"
Проблема в том, что данный скрипт отправляет несколько писем, если находит больше одного маршрута с " 0.0.0.0". А нужно, что бы присылалось только одно письмо со всеми маршрутами в теле и первым маршрутом в теме письма. Либо вообще цикл заканчивался после первого найденного маршрута и отправлял письмо с первым найденным маршрутом.

Буду благодарен за ваши советы и помощь.

Iska 10-04-2018 22:55 2808192

Цитата:

Цитата s.i.p.a
нужно, что бы присылалось только одно письмо со всеми маршрутами в теле и первым маршрутом в теме письма. »

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

(
        for /f "usebackq tokens=3-4" %%i in (
                `route.exe print ^| find.exe " 0.0.0.0"`
        ) do (
                if not defined sSubject set sSubject=%%i - %%j
                echo %%i - %%j
        )
) | blat.exe - -to user1@tut.by -server 192.168.33.200 -f user2@tut.by -u user2@tut.by -pw user2 -subject "%sSubject%"

endlocal
exit /b 0

Цитата:

Цитата s.i.p.a
Либо вообще цикл заканчивался после первого найденного маршрута и отправлял письмо с первым найденным маршрутом. »

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=3-4" %%i in (
                `route.exe print ^| find.exe " 0.0.0.0"`
        ) do (
                blat.exe - -to user1@tut.by -server 192.168.33.200 -f user2@tut.by -u user2@tut.by -pw user2 -subject "%%i - %%j" -body "%%i - %%j"
                goto :Out
        )

:Out

endlocal
exit /b 0

Не проверялось.

В первом коде вывод от разбора фильтрации группируется и передаётся по конвейеру на stdin blat.exe (посему параметр -body не используется), тема письма формируется из первой отфильтрованной строки разбора.

Во втором коде тупо происходит выход за пределы цикла разбора после первого прохода.

s.i.p.a 11-04-2018 20:13 2808338

Iska, второй скрипт вроде рабочий. Первый, к сожалению, вообще не запускается. Батник сразу закрывается. Завтра проверю, когда будет доступ к серверу почты. ПОка огромное спасибо и на этом.

Iska 12-04-2018 01:31 2808364

Цитата:

Цитата s.i.p.a
Первый, к сожалению, вообще не запускается. Батник сразу закрывается. »

Запускается. Но отрабатывает ошибку. Посмотрю, подумаю, вспомню, что можно попытаться сделать. В крайнем случае можно будет тупо использовать временный файл.


Время: 13:57.

Время: 13:57.
© OSzone.net 2001-