找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25202|回复: 3

[系统相关] 分享一段自己写的自动备份批处理代码顺便求精简

[复制链接]
发表于 2016-12-13 23:39:33 | 显示全部楼层 |阅读模式
如题自己写了一个小工具,这里是其中的一段使用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
复制代码
此脚本只能在管理员权限下运行,整个完整的脚本我是使用计划任务来进行的.
发表于 2016-12-14 00:49:21 | 显示全部楼层
参考我写的这个批处理,可以把添加任务计划的操作放到里面,双击运行的时候自动添加到任务计划。
http://bbs.bathome.net/thread-37681-1-1.html
 楼主| 发表于 2016-12-14 00:52:29 | 显示全部楼层
本帖最后由 kingshui 于 2016-12-14 00:56 编辑

回复 2# codegay


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

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

而且我这脚本自己用利用fc命令进行本地脚本与服务器脚本的对比,只要服务器更新了,那么本地也会跟着更新了...
发表于 2016-12-14 09:46:46 | 显示全部楼层
多写写注释吧,方便别人读懂你的代码,也方便你今后的维护。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 11:31 , Processed in 0.018150 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表