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

鉴于自诩为“程序员大本营”的 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这是两个用批处理方式实现的目录比较工具工具一:sha1comv3.bat 接受两个目录参数,计算两个目录里每个文件的 sha1 值,并给出报表文件 sha1v3.txt,使用方法: sha1comv3.bat 根据这 sha1comv3.bat 生成的报表文件 sha1v3.txt,可以找现两个目录中 1:同名而且 sha1 相同的文件; 2:同名但是 sha1 不同的文件; 3:不同名但是 sha1 相同的文件; 4:同一目录中不同名但是 sha1 相同的文件。 工具二:md5comv3.bat 接受两个目录参数,计算两个目录里每个文件的 md5 值,并给出报表文件 md5v3.txt,使用方法: md5omv3.bat 根据这 md5comv3.bat 生成的报表文件 md5v3.txt,可以找现两个目录中 1:同名而且 md5 相同的文件; 2:同名但是 md5 不同的文件; 3:不同名但是 md5 相同的文件; 4:同一目录中不同名但是 md5 相同的文件。 注意事项: 1:sha1comv3.bat 和 md5comv3.bat 都不接受路径带有空格的目录名,但是可以接受带有空格的文件名; 2:sha1 和 md5 的计算由 md5sum.exe 和 sha1sum.exe 完成,libiconv2.dll 和 libintl3.dll 是两个可执行文件需要的动态库; 3:sha1comv3.bat 和 md5comv3.bat 运行时会产生大量临时文件,这些文件由工具自动维护,不必手工清理。 这两个工具都是命令行方式、文本界面的,对于习惯使用图形界面的朋友来说,可能不方便,因此,不推荐习惯使用图形界面的朋友使用。 有问题请写邮件到 rubble@126.com。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值