Пакетный скрипт для сравнения данных - PullRequest
0 голосов
/ 02 июля 2018

Каждый день в моей команде группа людей извлекает отчет из портала и называет его как ABC_23MAY2018.txt, XYZ_23MAY2018.txt и сохраняет его в каталоге.

Но из-за того, что это ручной процесс, люди делают ошибку, как будто они извлекают отчет 22MAY2018 (с неправильной датой на входе портала) и называют его ABC_23MAY2018.txt и т. Д.
Это вызвало множество проблем, так как файл используется для целей отчетов. Я думал создать пакетный скрипт, который будет извлекать дату из имени файла - 23MAY2018 и сравнивать ее с датой, которая будет извлечена в другом файле date.txt. Я разобрался, чтобы извлечь дату из имени файла:

set Filedate=ABC*.csv
 for /f %%A in ('dir /b %Filedate%') do (
  set filename=%%~A
  set fileCSV=!filename:~9,10!
  echo !filename:~9,10!
)

Но как сравнить это с датой в файле. например, после извлечения даты из имени файла ее необходимо сравнить с данными data.txt, которые имеют значение, например:

ABC,23MAY2018                                                                              
XYZ,23MAY2018

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

Как мне этого добиться? Надеюсь, я хорошо объяснил свою проблему.

1 Ответ

0 голосов
/ 02 июля 2018

Я бы использовал.

  • нормаль для итерации файлов %%A
  • a для / f для разделения имени без расширения на _ на %%B и %%C
  • используйте findstr для проверки наличия "Name,Date" в date.txt.
  • если найдено, переместите файл

Технически два for, findstr и move могут быть в одной строке, но за этим труднее следовать.


@Echo off
set "Filedate=ABC*.csv"
set "Destfolder=X:\where\ever"
for %%A in (%Filedate%) do (
    for /f "tokens=1*delims=_" %%B in ("%%~nA") Do (
        findstr /IBELC:"%%B,%%C" date.txt 2>&1>NUL && Move "%%A" "%DestFolder%"
    )
)
...