如何使用批处理脚本为每 100 个文件生成报告

How to generate reports for every 100 files using Batch Scipt

这是场景,例如我有 pairing.txt 中列出的文件列表。现在我正在对列出的所有文件进行比较,然后生成报告。现在,我想拥有一项功能,使用户能够为一份报告使用多少个文​​件。例如,我列出了 205 个文件。

FIRST 100 -    Report1.html
NEXT 100 -     Report2.html
Remaining 5 -  Report3.html

这是我的实际代码

for /f "tokens=2-4" %%a in ('type c:\user\pairing.txt') do (
  set /A Counter+=1
  echo Processing  ColumnA : %%a  ColumnB: %%b 
  echo  Processing  ColumnA : %%a  ColumnB: %%b >>comparison.log
  %varBCpath% %varBCscript% c:\user\ColumnA\%%a c:\user\ColumnB\%%b "c:\comp\report.html" "%title%" /silent
  type  c:\user\report.html >> c:\user\report\Report.html
)

它的作用是,它会获取pairing.txt中列出的文件并使用beyond compare 进行比较。现在默认情况下,所有比较将显示在 1 html 报告中。如果我希望用户可以选择输入他希望在每个 html 报告中显示多少个文件怎么办?

假设所提供代码的正确性,在 set /P 命令中预期的用户输入并测试是否为数字和正数;输出文件编号在 :myType 子例程中完成,如下所示:

:: some code here

:againhowmany
set /A "howmany=100"
set /P "howmany=how many files do you want for one report (Enter=%howmany%) "
set /A "howmany%%=100000"
if %howmany% LEQ 0 goto :againhowmany 

set /A "Counter=0"
set /A "ReportNo=1"

for /f "tokens=2-4" %%a in ('type c:\user\pairing.txt') do (
  set /A "Counter+=1"
  echo Processing  ColumnA : %%a  ColumnB: %%b 
  echo  Processing  ColumnA : %%a  ColumnB: %%b >>comparison.log
  %varBCpath% %varBCscript% c:\user\ColumnA\%%a c:\user\ColumnB\%%b "c:\comp\report.html" "%title%" /silent
  call :myType
)

:: some code here 
goto :eof

:myType
  type  c:\user\report.html >> c:\user\report\Report%ReportNo%.html
  set /A "Counter%%=%howmany%"
  if %Counter% EQU 0 set /A "ReportNo+=1" 
goto :eof

最终输出文件应该是

c:\user\report\Report1.html
c:\user\report\Report2.html
c:\user\report\Report3.html
...

编辑:根据OP的评论:例如我有12个文件列表,然后我为每个报告输入了10个文件。剩下的2个文件呢?

根据该条款,最终输出文件应为

Report1.html   - files (pair)  1..10
Report2.html   - files (pair) 11..12

请注意唯一的脚本更改:

  • CountNo 变量重命名为 ReportNo 以获得更好的洞察力;
  • ReportNo 开始 1(遵守相关说明)。

编辑2:我忘记了set /a命令提供(32位有符号)整数算术,所以:myType 程序可以简化如下:

:myType
  set /A "ReportNo=(%Counter%-1)/%howmany%+1"
  type  c:\user\report.html >> c:\user\report\Report%ReportNo%.html
goto :eof