如何使用批处理脚本为每 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
这是场景,例如我有 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