2006-09-14
一个比较文件夹不同的 DOS 批处理脚本
@echo off setlocal set dircmd=/ad /on /b if not exist old.txt ( dir > old.txt goto lblEndLocal ) echo. > log.txt dir > new.txt echo N | comp old.txt new.txt echo. if "%errorlevel%" == "0" ( goto lblEndLocal ) echo -------------------------------------- >> log.txt echo 已删除的文件夹: >> log.txt for /F "tokens=*" %%o in (old.txt) do ( call :lblSubProcessDeleted "%%o" ) echo. >> log.txt echo -------------------------------------- >> log.txt echo 新增的文件夹: >> log.txt for /F "tokens=*" %%n in (new.txt) do ( call :lblSubProcessAdded "%%n" ) copy /y new.txt old.txt REM 发送邮件 if defined CYGWIN_HOME ( %CYGWIN_HOME%\bin\email --version if "%ERRORLEVEL%" == "0" ( %CYGWIN_HOME%\bin\email --subject "文件夹有变化" account@domain.com < log.txt ) else ( echo 未安装 email 工具 ) ) else ( echo 未安装 cygwin 仿 unix 环境 ) :lblEndLocal endlocal goto :EOF :lblSubProcessDeleted findstr /x /c:%1 new.txt > NUL REM echo %errorlevel% if "%errorlevel%" == "0" ( REM echo "%~1 found in new.txt!" ) else ( REM echo %~1 not found in new.txt! it's DELETED echo %1 >> log.txt ) goto :EOF :lblSubProcessAdded findstr /x /c:"%~1" old.txt > NUL REM echo %errorlevel% if "%errorlevel%" == "0" ( REM echo %~1 found in old.txt! ) else ( REM echo %~1 not found in old.txt! it's ADDED echo %1 >> log.txt ) goto :EOF