用于比较数据的批处理脚本

Batch Script to compare data

在我的团队中,每天都有一群人从门户网站提取报告并将其命名为 ABC_23MAY2018.txtXYZ_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中提取的日期需要与第一行进行比较,第二列有日期。如果它们相等,则将文件移动到另一个目录中。

如何实现?希望我能很好地解释我的问题。

我会用。

  • 循环文件的常态%%A
  • a for /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%"
    )
)