用于比较数据的批处理脚本
Batch Script to compare data
在我的团队中,每天都有一群人从门户网站提取报告并将其命名为 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
中提取的日期需要与第一行进行比较,第二列有日期。如果它们相等,则将文件移动到另一个目录中。
如何实现?希望我能很好地解释我的问题。
我会用。
- 循环文件的常态
%%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%"
)
)
在我的团队中,每天都有一群人从门户网站提取报告并将其命名为 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
中提取的日期需要与第一行进行比较,第二列有日期。如果它们相等,则将文件移动到另一个目录中。
如何实现?希望我能很好地解释我的问题。
我会用。
- 循环文件的常态
%%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%"
)
)