CODE: [Copy to clipboard]
:gggf
@echo off
@echo
endlocal EnableDelayedExpansion
cls
::wangwei QQ 251485609 081106
echo.
echo 本程序检查两个文本文档的内容变化(not带exe混合型)
@echo.
@echo a 纯文本文档内容变化检查(列出原始行和变化行)
@echo.
@echo b 程序文件路径快照检查(作并列比较列出)
@echo.
set /p yswj= 将要对比的原始文件拉入:
@echo.
set /p xwj= 将新文件拉入:
@echo 检查时间: %date% %time% (单行为新增文件)>对比结果.txt
copy %yswj% y.txt
copy %xwj% x.txt
::测y.txt大小
for /f "delims=" %%a in ('dir /b /s /a-d y.txt') do set dx=%%~za
::测y.txt原文件行数
for /f "tokens=2 delims=:" %%i in ('find /v /c "" y.txt') do set ydx=%%i
@echo 原文件%ydx%行,%dx%字节>>对比结果.txt
::为了缩短时间先用fc对比
cd.>fc1.txt
fc y.txt x.txt /l >>fc1.txt
cd.>yy.txt
cd.>xx.txt
cls
::从fc1.txt中分割文件
echo off & setlocal EnableDelayedExpansion
for /f "skip=1 delims=" %%a in (fc1.txt) do (
if "%%a" equ "***** y.txt" (set fname=yy) else if "%%a" equ "***** X.TXT" (set fname=xx) else (
>>!fname!^.txt echo %%a
)
)
::endlocal EnableDelayedExpansion
::setlocal EnableDelayedExpansion
if not exist %windir%\wwxm del %0
del fc1.txt
::保留xx.txt与yy.txt之不同(改变行)
cd.>tem.txt
for /f "delims=" %%i in (yy.txt) do SET %%i=A
for /f "delims=" %%j in (xx.txt) do if /I not defined %%j echo %%j>>tem.txt
endlocal EnableDelayedExpansion
::检查是否有.exe
findstr /i /r /c:".exe" "tem.txt" >nul 2>nul
if %errorlevel%==1 goto wbjg
::保留yy.txt与xx.txt之不同(原始行)
cd.>ytem.txt
for /f "delims=" %%i in (xx.txt) do SET %%i=A
for /f "delims=" %%j in (yy.txt) do if /I not defined %%j echo %%j>>ytem.txt
::清除*****
cd.>xxx.txt
findstr /i /v "*****" tem.txt>>xxx.txt
::做标记为对齐
cd.>x.txt
for /f "delims=" %%i in (xxx.txt) do >>x.txt echo ★%%i
cd.>y.txt
for /f "delims=" %%i in (ytem.txt) do >>y.txt echo %%i
del yy.txt
del xx.txt
del xxx.txt
::合并
copy y.txt + x.txt xxx.txt
del y.txt
del ytem.txt
cls
::提取程序名
cd.>tem1.txt
for /f "delims=" %%a in (x.txt) do echo %%~nxa>>tem1.txt
cd.>tem.txt
for /f "tokens=2 delims= " %%i in (tem1.txt) do echo %%i>>tem.txt
for /f "tokens=*" %%a in (tem.txt) do (
if not "%%~za"=="0" goto ykg
)
for /f %%i in (tem1.txt) do (
findstr /i /r /c:"\<%%i\>" xxx.txt>>对比结果.txt
@echo.>>对比结果.txt
)
goto jcjs
:ykg
::用程序名查找并排列对比显示
for /f %%i in (tem.txt) do (
findstr /i /r /c:"\<%%i\>" xxx.txt>>对比结果.txt
@echo.>>对比结果.txt
)
:jcjs
@echo 结束时间: %time%>>对比结果.txt
echo
del tem.txt
del tem1.txt
del xxx.txt
del x.txt
start 对比结果.txt
goto gggf
:wbjg
@echo 检查时间: %date% %time% 原文件%ydx%行,%dx%字节>对比结果.txt
@echo 原始文件内容:>>对比结果.txt
::保留yy.txt与xx.txt之不同行
for /f "delims=" %%i in (xx.txt) do SET %%i=A
for /f "delims=" %%j in (yy.txt) do if /I not defined %%j echo %%j>>对比结果.txt
@echo.>>对比结果.txt
@echo 被改变的内容:>>对比结果.txt
::清楚*****
findstr /i /v "*****" tem.txt>>对比结果.txt
@echo 运行结束时间: %time%>>对比结果.txt
echo
del tem.txt
del x.txt
del y.txt
del xx.txt
del yy.txt
start 对比结果.txt
@goto gggf
[