Board logo

标题: [系统相关] 分享一段自己写的自动备份批处理代码顺便求精简 [打印本页]

作者: kingshui    时间: 2016-12-13 23:39     标题: 分享一段自己写的自动备份批处理代码顺便求精简

如题自己写了一个小工具,这里是其中的一段使用shadowscopy进行备份的代码,问下有没精简的方案
注:精简的话主要在针对盘符上,但要考虑映射驱动器的问题.我这个脚本适合在我的工作环境中使用,所有机器都分两个盘,所以没什么麻烦事.当然如果能识别映射驱动器的话就更好.

代码如下:
  1. @echo off & setlocal enabledelayedexpansion
  2. set sc=c:\temp\shadowsc.txt
  3. set sd=c:\temp\shadowsd.txt
  4. set tp=%temp%\tmp.tmp
  5. (
  6. if not exist %sc% for /f "tokens=2 delims={}" %%i in ('^(vssadmin list shadows /for^=c:\^|find "Copy ID:"^)^|^|^(vssadmin list shadows /for^=c:\^|find "副本 ID:"^)') do echo.%%i>>%sc%
  7. for /f %%i in ('find /v /c "" ^<%sc%') do (
  8. if %%i LEQ 6 goto :nextc
  9. set /a line=%%i-6
  10. for /f %%i in (%sc%) do (
  11. set id=%%i
  12. set /a a+=1
  13. vssadmin delete shadows /shadow={!id!} /quiet
  14. if !a! equ !line! more +!line! %sc%>%tp% && move /y %tp% %sc%>nul & goto :nextc
  15. )
  16. )
  17. :nextc
  18. for /f "tokens=2 delims={}" %%i in ('wmic shadowcopy call create clientaccessible^,c:\^|find "ShadowID"') do echo.%%i>>%sc%
  19. if exist d: (
  20. if not exist %sd% for /f "tokens=2 delims={}" %%i in ('^(vssadmin list shadows /for^=d:\^|find "Copy ID:"^)^|^|^(vssadmin list shadows /for^=d:\^|find "副本 ID:"^)') do echo.%%i>>%sd%
  21. for /f %%i in ('find /v /c "" ^<%sd%') do (
  22. if %%i LEQ 6 goto :nextd
  23. set /a line=%%i-6
  24. for /f %%i in (%sd%) do (
  25. set id=%%i
  26. set /a a+=1
  27. vssadmin delete shadows /shadow={!id!} /quiet
  28. if !a! equ !line! more +!line! %sd%>%tp% && move /y %tp% %sd%>nul & goto :nextd
  29. )
  30. )
  31. :nextd
  32. for /f "tokens=2 delims={}" %%i in ('wmic shadowcopy call create clientaccessible^,d:\^|find "ShadowID"') do echo.%%i>>%sd%
  33. )
  34. )>nul
复制代码
此脚本只能在管理员权限下运行,整个完整的脚本我是使用计划任务来进行的.
作者: codegay    时间: 2016-12-14 00:49

参考我写的这个批处理,可以把添加任务计划的操作放到里面,双击运行的时候自动添加到任务计划。
http://bbs.bathome.net/thread-37681-1-1.html
作者: kingshui    时间: 2016-12-14 00:52

本帖最后由 kingshui 于 2016-12-14 00:56 编辑

回复 2# codegay


    谢谢你的回复,这个操作我早实现,现在主要目的是想精简代码呢,

我很懒的,直接在服务器run一个定时的批,扫描全网段的机器,只要发现没有这个脚本的自动copy 到目标机器并创建相应的计划任务.所以只要服务器的批在运行,那么有新机器就会执行操作,

而且我这脚本自己用利用fc命令进行本地脚本与服务器脚本的对比,只要服务器更新了,那么本地也会跟着更新了...
作者: Batcher    时间: 2016-12-14 09:46

多写写注释吧,方便别人读懂你的代码,也方便你今后的维护。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2