找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1164|回复: 3

[文本处理] 对比1,2文本同一行的不同内容写在3文本上

[复制链接]
发表于 2026-1-16 12:03:49 | 显示全部楼层 |阅读模式
人工智能写的,好用,在一个文件夹内,有1.txt,2.txt两个文本,和1个bat,双击bat,对比1,2文本同一行的不同内容写在3文本上,可以监控空行或者行数不同
batch

@echo off
chcp 936 >nul
setlocal enabledelayedexpansion

if not exist "1.txt" (echo 错误:找不到1.txt & pause & exit)
if not exist "2.txt" (echo 错误:找不到2.txt & pause & exit)

set "file1=1.txt"
set "file2=2.txt"
set "output=4.txt"

echo 正在比较文件...

rem 使用一个临时文件来记录2.txt的行号,以便处理空行
findstr /n "^" "%file2%" > temp2.txt

rem 清空输出文件
echo. > "%output%"

set /a lineNum=0
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%file1%"') do (
    set /a lineNum=%%a
    set "line1=%%b"

    rem 从temp2.txt中读取对应行
    set "line2="
    for /f "tokens=1* delims=:" %%x in ('findstr /b "!lineNum!:" temp2.txt') do (
        set "line2=%%y"
    )

    rem 如果line2未定义(即2.txt的行数少于1.txt),则设置为空
    if not defined line2 set "line2="

    rem 比较
    if "!line1!" neq "!line2!" (
        if "!line2!"=="" (
            echo [第!lineNum!行] 2.txt为空行 >> "%output%"
        ) else (
            echo [第!lineNum!行] !line2! >> "%output%"
        )
    )
)

rem 检查2.txt是否有比1.txt多的行
set /a lineNum+=1
:check_extra
for /f "tokens=1* delims=:" %%x in ('findstr /b "!lineNum!:" temp2.txt') do (
    set "line2=%%y"
    if not defined line2 set "line2="
    echo [第!lineNum!行] !line2! >> "%output%"
    set /a lineNum+=1
    goto check_extra
)

del temp2.txt 2>nul

if exist "%output%" (
    for %%F in ("%output%") do set "size=%%~zF"
    if !size! gtr 1 (
        echo 比较完成,差异已保存到 %output%。
    ) else (
        echo 两个文件内容完全相同。
        del "%output%"
    )
)

pause
发表于 2026-1-16 13:29:54 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-1-16 16:35 编辑

回复 1# hepeisheng

直接调用系统内置的 fc.exe 和 find.exe 可迅速获取以下结果,调整 fc.exe 命令行参数还可输出更多比对结果...
代码先读取命令行参数作为源文件,若参数不足两个,则改用当前目录下的 1.txt, 2.txt 作为源文件

  1. @echo off & if "%~2"=="" (set "f1=1.txt" &set "f2=2.txt") else (set "f1=%~1" &set "f2=%~2")
  2. echo,比较 %f1% 和 %f2% ...
  3. FC.exe /b "%f1%" "%f2%">nul&&(echo,文件内容相同)||(echo,文件内容不同)
  4. for /f %%n in ('find /c /v ""^<"%f1%" ') do set "n1=%%n"
  5. for /f %%n in ('find /c /v ""^<"%f2%" ') do set "n2=%%n"
  6. if %n1% equ %n2% (echo,文件行数相同) else (echo,文件行数不同)
  7. pause&exit/b
复制代码
发表于 2026-1-16 16:18:18 | 显示全部楼层
精神值得佩服,但是这种行为,我无法理解,也不敢苟同。
如果要对比文本,word和wps更好用。。
而且还有一个专业工具Beyond Compare,更好用。
 楼主| 发表于 2026-1-19 23:19:44 | 显示全部楼层
回复 3# 初学者001


    Beyond Compare的确很好用多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 21:38 , Processed in 0.015480 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表