Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла

Ответить
Настройки темы
CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла

Новый участник


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

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


Изменения
Автор: JackL
Дата: 20-05-2013
Описание: неверно оформил
Уважаемые господа помогите реализовать батник, умеющий обрабатывать и отправлять файл на электронную почту.

Т.е. есть файл 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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Есть файл текст с описанием Страховых компаний text2.txt (можно организовать по-разному, как удобнее для обработки).

Код: Выделить весь код
РЕСО-Гарантия. Открытое страховое акционерное общество "РЕСО-Гарантия" основано в 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 году. Входит в группу РЕСО, объединяющую ряд     компаний, в том числе и страховых, работающих как на территории РФ, так и за ее….
3) Отправка получившегося файла out.txt, как текста письма, по адресу указанному в нутрии файла text.txt или out.txt “e-mail: 3197087@mail.ru
4) Перенесение файлов text.txt и out.txt в архив.

Отправлено: 13:08, 20-05-2013

 

Ветеран


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

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


Код: Выделить весь код
@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
ЗЫ. В text2.txt название страховой компании должно быть ТОЛЬКО на одной строке и все описание там же.

ЗЫЫ. Батник не лучший вариант для обработки текста, особенно кириллицы.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 20-05-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


Foreigner, Спасибо.

С отправкой на майл все получилось. Спасибо. Но вот из файла text2.txt в итоговый файл out.txt подставляется всегда первая строка с описанием страховой из списка. А надо, что бы имя страховой в text.txt совпадало с добавляемым описанием из text2.txt

Еще раз Спасибо, Foreigner. Просьба помочь добить задачу.

Последний раз редактировалось JackL, 21-05-2013 в 00:49. Причина: правка оформления


Отправлено: 00:21, 21-05-2013 | #3


Ветеран


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

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


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
      
)

...
При условии, что формат text2.txt будет:
Код: Выделить весь код
Ресо#Езжайте на Нагорную и ждите оценщика
Оранта#Основана в 1905 году. Бла Бла
Росгорстрах#Что-то там про компанию
Чижик-Пыжик#Где ты был?
Т.е. разделитель "#" в строке "insurance company#description"

Батник должен быть в кодировке windows-1251
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:35, 21-05-2013 | #4


Ветеран


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

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


Цитата JackL:
3) Отправка получившегося файла out.txt, как текста письма, по адресу указанному в нутрии файла text.txt или out.txt “e-mail: 3197087@mail.ru
4) Перенесение файлов text.txt и out.txt в архив. »
-- с зтими пунктами задания нужно разбираться "чисто конкретно" (да и особого желания нет).



А по пунктам 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
Благодарности: 575

Профиль | Отправить 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
Благодарности: 0

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


Огромное Спасибо, Georgio и Foreigner! Все получилось.

Отправлено: 12:51, 26-05-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход