|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 | |
|