Использование циклов для переименования имен файлов с помощью пакетного скрипта

У меня есть папка с файлами: File1.txt и File2.txt

Содержимое file1.txt:

"DTS053C0 RUN DATE 10/01/11 DATATRAK SYSTEM PAGE 001
RUN TIME 13:35:08
INPUT PROGRAM TRANSMISSION STATUS REPORT
STATUS - INPUT RECEIVED BY DTCC'S DATATRAK SYSTEM
DETAIL RECORDS RECEIVED 0
HEADER RECORD RECEIVED
HDR.SSYSID.E00.CORIG.SSUBOMMDDYYYY HEADERFILEDESCRIPTION N001 *
REJECTED
NO MATCH ON EXPECTED MASTER FOR HEADER" 

Содержимое файла file2.txt:

"The confirm file received from DTCC will be in the following format:
DTS053C0 RUN DATE 10/01/11 DATATRAK SYSTEM PAGE 001
RUN TIME 12:53:32
INPUT PROGRAM TRANSMISSION STATUS REPORT
STATUS - INPUT RECEIVED BY DTCC'S DATATRAK SYSTEM
DETAIL RECORDS RECEIVED 22
HEADER RECORD RECEIVED
HDR.SSYSID.E00.CORIG.SSUBOMMDDYYYY HEADERFILEDESCRIPTION N001 *
ACCEPTED
Example"

Я ищу пакетный скрипт для сканирования содержимого этих двух файлов по отдельности и определения файлов, которые содержат слово "ОТКЛОНЕНО", а затем отправляю электронное письмо на мой электронный идентификатор, например, уведомление "этот файл был отклонен, любезно проверять".

  • Я использую blat для отправки писем в качестве уведомлений *

1 ответ

Решение

Чтобы обернуть предложение @Stephans в пакет:

  • Findstr /M сообщает только имена файлов, у которых есть совпадение REJECTED,
  • for /f обрабатывает этот вывод, и набор собирает это в переменной Found. Первая запись приводит к запятой.
  • При окончательной передаче содержимого этой переменной в качестве аргумента подпрограмме:Blat эта первая запятая удаляется подстрокой %Found:~1% со 2-го поста (с нуля)
  • В сабе вы можете использовать %* = (все переданные аргументы), чтобы иметь его в качестве темы письма или тела для вашей blat рутины.

:: Q:\Test\2018\06\14\SO_50858355.cmd
@Echo off & Setlocal EnableDelayedExpansion
Set "Search=REJECTED"
Set "Files=file?.txt"
Set "Found="
for /f "delims=" %%A in ('
  findstr /m /i "%Search%" %Files%
') Do set "Found=!Found!,%%A"
If Defined Found (
    Call :Blat %Found:~1%
) Else (
    Echo No files "%Files%" containing "%Search%" found
)
Pause
Goto :Eof

:Blat
Echo found Rejected in %1
If "%2" neq "" (shift & goto :Blat)

Образец вывода:

> SO_50858355.cmd
Yourblatcommand found Rejected in file1.txt

новый пример вывода:

> SO_50858355.cmd
found Rejected in file3.txt
found Rejected in file1.txt

Пакетный файл как есть ищет только в текущей папке и с подстановочным знаком file?.txt поэтому вы должны адаптировать переменные в соответствии с вашими потребностями или сначала установить другой рабочий каталог.

Другие вопросы по тегам