返回列表 发帖
本帖最后由 aloha20200628 于 2025-4-8 14:47 编辑

回复 1# 304802301

以下代码存为 test.bat 与 demo.txt, a.txt, b.txt 同目录运行...
代码流程根据楼主要求的顺序/步骤,但须确保被处理的三个 *.txt 源文件是 ansi(gb2312 即简中)编码
备注》如果三个源文件各自均无重复文本行,亦可删除代码第8-9行,如此运行效率可能会提升...
@echo off &cd.>"result.txt" &set "n=0"
for /f "delims=" %%s in (demo.txt) do (
   set/a "n+=1" &call echo,正在处理第 %%n%% 行...
   set "s=%%s" &setlocal enabledelayedexpansion &set/p="!s!,">>"result.txt"
   (findstr /lx "!s!" "a.txt">nul)&(if !errorlevel! neq 0 (set/p="a.txt不存在,") else set/p="a.txt存在,")>>"result.txt"
   (findstr /lx "!s!" "b.txt">nul)&(if !errorlevel! neq 0 (set/p="b.txt不存在,") else set/p="b.txt存在,")>>"result.txt"
   echo,!date:~,4!!date:~5,2!!date:~8,2!!time:~,2!!time:~3,2!!time:~6,2!秒>>"result.txt"
   findstr /lxv "!s!" "a.txt">"_a.txt" &(move /y "_a.txt" "a.txt">nul)
   findstr /lxv "!s!" "b.txt">"_b.txt" &(move /y "_b.txt" "b.txt">nul)
   endlocal
) 2>nul <nul
pause&exit/bCOPY

TOP

本帖最后由 aloha20200628 于 2025-4-8 13:05 编辑

回复 1# 304802301

再给一个 bat+powershell 版本,存为 test.bat 与 demo.txt, a.txt, b.txt 同目录运行...
假设被处理的三个 *.txt 源文件均是 ansi(gb2312 即简中)编码
假设 powershell 一次性读入 *.txt 不会产生内存溢出,据此可省略处理过程中对 *.txt 源文件的反复删减
如果 demo.txt 文件有大量重复文本行,应先对其去重以便提高处理效率,为此代码采用了 powershell 的高速去重方法
当前行处理提示信息会在 cmd 运行窗口标题行上显示...
<# ::
@echo off &powershell -c "iex(${%~f0}|out-string)" &pause&exit/b
#>
$n=0; $a=gc 'a.txt' -readcount 1000; $b=gc 'b.txt' -readcount 1000
[Collections.Generic.HashSet[string]](gc 'demo.txt' -readcount 1000) | % {
   $host.UI.RawUI.WindowTitle='正在处理第'+ (++$n) +'行...'
   if ($_ -in $a) {$sa='a.txt存在'} else {$sa='a.txt不存在'}
   if ($_ -in $b) {$sb='b.txt存在'} else {$sb='b.txt不存在'}
   $_+','+$sa+','+$sb+','+(Get-Date -Format "yyyy年MM月dd日HH点mm分ss秒")
} | out-file 'result.txt' -enc default
exitCOPY
如果确认 demo.txt 文件中没有重复文本行,则可将以上代码中第5行改为 (gc 'demo.txt' -readcount 1000) | % { 即可

TOP

返回列表