您的位置:首页 > 其它

一个比较“子文件夹差异”的 DOS 批处理脚本

2006-09-14 23:59 495 查看
鉴于自诩为“程序员大本营”的 csdn blog 却对 <pre> 这个最适合贴代码的标签不支持,致使代码变为1行的现象,我已将该文放在我的 Wiki 上,有兴趣的可以浏览:http://maclife.net/wiki/index.php?title=%E7%94%A8%E4%BA%8E%E6%AF%94%E8%BE%83%E2%80%9C%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E5%88%97%E8%A1%A8%E5%B7%AE%E5%BC%82%E2%80%9D%E7%9A%84_DOS_%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC

该脚本来比较自上次执行该脚本以来,当前文件夹的子文件夹与上次的差别

@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: