|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла |
|
CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла
|
Новый участник Сообщения: 3 |
Уважаемые господа помогите реализовать батник, умеющий обрабатывать и отправлять файл на электронную почту.
Т.е. есть файл text.txt вида (автоматически сохраняется в папке, при приходе этого письма «the Bat»-ом): =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= От: alex@gmail.com <alex@gmail.com> Кому: Написано: 20 мая 2013 г., 11:24:37 Тема: Заявка Файлы: Письмо.html --====----====----====----====----====----====----====----====----====----===-- Здравствуйте, Алексей. Пользователь Алексей заказал оформление. Контактные данные: имя: Алексей телефон: 8654975431 e-mail: 3197087@mail.ru Автомобиль: KIA Водители: Женщина, 30 лет, стаж 2 года Мужчина, 40 лет, стаж 5 лет Страховая компания: РЕСО-Гарантия Стоимость: 1 000 рубей --- C уважением, Алексей mail@on.ru =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= РЕСО-Гарантия. Открытое страховое акционерное общество "РЕСО-Гарантия" основано в 1991 году. Входит в группу РЕСО, объединяющую ряд компаний, в том числе и страховых, работающих как на территории РФ, так и за ее…. ОРАНТА. Страхование ведет свою историю с 1995 года и сегодня является одним из весомых операторов на российском рынке. и т.д. 1) При получении письма в папке появляется файл text.txt. 2) На основании этого файла надо создать файл out.txt (убирается верх и низ файла text.txt, а по названию страховой компании подставляется вниз текст из файла text2.txt) Пользователь Алексей заказал оформление. Контактные данные: имя: Алексей телефон: 8654975431 e-mail: 3197087@mail.ru Автомобиль: KIA Водители: Женщина, 30 лет, стаж 2 года Мужчина, 40 лет, стаж 5 лет Страховая компания: РЕСО-Гарантия Стоимость: 1 000 рубей Открытое страховое акционерное общество "РЕСО-Гарантия" основано в 1991 году. Входит в группу РЕСО, объединяющую ряд компаний, в том числе и страховых, работающих как на территории РФ, так и за ее…. 4) Перенесение файлов text.txt и out.txt в архив. |
|
Отправлено: 13:08, 20-05-2013 |
Ветеран Сообщения: 1758
|
@echo off setlocal for /f "tokens=1 delims=:" %%i in (' findstr /n /c:"---" text.txt ') do ( if not defined start ( set /a "start=%%i+1" ) else ( set /a "stop=%%i-1" ) ) 1>1.tmp more +%start% text.txt 1>2.tmp more +%stop% text.txt 1>out.txt ( findstr /v /b /e /g:2.tmp 1.tmp for /f "tokens=2 delims=:" %%i in (1.tmp) do findstr "%%i" text2.txt ) for /f "tokens=2 delims=:" %%i in ('findstr "e-mail" 1.tmp') do set "mail=%%i" :: Как отправлять решайте сами, у меня нет консольной отправлялки почты echo sending file out.txt to %mail% :: Переносим в "архив". Здесь не все ясно, поэтому echo for %%i in (text.txt out.txt) do echo move %%i C:\Archive del *.tmp ЗЫЫ. Батник не лучший вариант для обработки текста, особенно кириллицы. |
Отправлено: 20:14, 20-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Foreigner, Спасибо.
С отправкой на майл все получилось. Спасибо. Но вот из файла text2.txt в итоговый файл out.txt подставляется всегда первая строка с описанием страховой из списка. А надо, что бы имя страховой в text.txt совпадало с добавляемым описанием из text2.txt Еще раз Спасибо, Foreigner. Просьба помочь добить задачу. |
Последний раз редактировалось JackL, 21-05-2013 в 00:49. Причина: правка оформления Отправлено: 00:21, 21-05-2013 | #3 |
Ветеран Сообщения: 1758
|
JackL, Попробуйте изменить:
... 1>1.tmp more +%start% text.txt 1>2.tmp more +%stop% text.txt for /f "tokens=2 delims=:" %%i in ('find "Страховая компания" 1.tmp') do set "ins=%%i" 1>out.txt ( findstr /v /b /e /g:2.tmp 1.tmp for /f "tokens=1,2 delims=#" %%i in (text2.txt) do if " %%i"=="%ins%" echo %%j ) ... Ресо#Езжайте на Нагорную и ждите оценщика Оранта#Основана в 1905 году. Бла Бла Росгорстрах#Что-то там про компанию Чижик-Пыжик#Где ты был? Батник должен быть в кодировке windows-1251 |
Отправлено: 07:35, 21-05-2013 | #4 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата JackL:
А по пунктам 1) и 2) вот такое решение: @ECHO OFF>out.txt SETLOCAL ENABLEDELAYEDEXPANSION SET Number_of_Skipping_Strings_from_the_Beginning=9 SET Number_of_Skipping_Strings_from_the_End=6 FOR /F "tokens=1* delims=:" %%I IN ('FINDSTR /N /R . text.txt^&^&ECHO.^&^&FINDSTR /N /R /V . text.txt') DO IF DEFINED Number_of_Strings (IF %%I GTR !Number_of_Strings! SET Number_of_Strings=%%I) ELSE SET Number_of_Strings=%%I SET /A VAR1=Number_of_Strings-Number_of_Skipping_Strings_from_the_End FOR /L %%I IN (1,1,!Number_of_Strings!) DO FOR /F "tokens=1* delims=:" %%J IN ('FINDSTR /N /R . text.txt^&^&ECHO.^&^&FINDSTR /N /R /V . text.txt') DO IF %%I==%%J IF %%I GTR %Number_of_Skipping_Strings_from_the_Beginning% IF %%I LEQ %VAR1% SET VAR2=%%K&IF DEFINED VAR2 (SET VAR3=!VAR2: =!&IF DEFINED VAR3 (ECHO %%K>>out.txt) ELSE ECHO.>>out.txt) ELSE ECHO.>>out.txt FOR /F "tokens=1,2* delims=: " %%I IN (text.txt) DO IF "%%I %%J"=="Страховая компания" FOR /F "tokens=1* delims=." %%L IN (text2.txt) DO IF %%L==%%K ECHO %%L.%%M>>out.txt Скрипт "делает обрезание" текста на заданное количество строк как сверху, так и снизу. В коде заданы переменные согласно шаблону, но можно редактировать. При подсчёте строк учитываются все строки, в том числе пустые и заполненные одним или более пробелами. При репликации оставшейся части текста строки с одними пробелами эаменяются на пустые строки. Пустые строки сохраняются. Временные файлы не применяются. Извините, что в коде длинные строки, поленился переделать. |
||
Последний раз редактировалось Georgio, 21-05-2013 в 13:10. Причина: исправление опечатки Отправлено: 10:32, 21-05-2013 | #5 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Этот скрипт делает то же самое, что и предыдущий, только используется FIND вместо FINDSTR. В результате одним циклом меньше.
@ECHO OFF>out.txt SETLOCAL ENABLEDELAYEDEXPANSION SET Number_of_Skipping_Strings_from_the_Beginning=9 SET Number_of_Skipping_Strings_from_the_End=6 FOR /F %%I IN ('FIND /C /V ""^<text.txt') DO SET Number_of_Strings=%%I SET /A VAR1=Number_of_Strings-Number_of_Skipping_Strings_from_the_End FOR /F "tokens=1* delims=[]" %%I IN ('FIND /N /V ""^<text.txt') DO ( IF %%I GTR %Number_of_Skipping_Strings_from_the_Beginning% ( IF %%I LEQ %VAR1% ( SET VAR2=%%J IF DEFINED VAR2 ( SET VAR3=!VAR2: =! IF DEFINED VAR3 ( ECHO %%J>>out.txt ) ELSE ( ECHO.>>out.txt )) ELSE ( ECHO.>>out.txt )))) FOR /F "tokens=1,2* delims=: " %%I IN (text.txt) DO ( IF "%%I %%J"=="Страховая компания" ( FOR /F "tokens=1* delims=." %%L IN (text2.txt) DO ( IF %%L==%%K ECHO %%L.%%M>>out.txt ))) |
Отправлено: 13:51, 22-05-2013 | #6 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Огромное Спасибо, Georgio и Foreigner! Все получилось.
|
Отправлено: 12:51, 26-05-2013 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону | onemal | Скриптовые языки администрирования Windows | 23 | 13-05-2017 15:35 | |
CMD/BAT - [решено] Отправка файла на почту | ma8883 | Скриптовые языки администрирования Windows | 1 | 04-12-2011 22:04 | |
CMD/BAT - [решено] Копирование файла по расписанию и его отправка по почте | LokkyZ | Скриптовые языки администрирования Windows | 8 | 03-10-2011 16:49 | |
CMD/BAT - [решено] Поиск нового файла за день, его шифрование, и отправка по почте. | dark-------13 | Скриптовые языки администрирования Windows | 1 | 23-04-2011 21:13 | |
CMD/BAT - [решено] Переименование файла по данным из самого файла | dark-------13 | Скриптовые языки администрирования Windows | 11 | 21-04-2011 18:08 |
|