|
|
人工智能写的,好用,在一个文件夹内,有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 |
|