联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
: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