[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 分享自己写的利用计划任务功能自动文件备分操作的BAT脚本

等级不够其它版本发不了贴,只好发这了
另外,不知道是不是等级原因发不上来图,本想把几个效果图放上来,只好图放去贴吧了,链接在此http://tieba.baidu.com/p/4423328647

去年因为公司需要自己做的一个脚本,当时也是到处查了不少资料,印象中好象不少都和批处理之家有渊源,现在也算回家啦。

脚本目前在Xp主机上已稳定运行了大半年,只要网络共享没问题其它都基本无需人工干预,这个脚本是利用计划任务激发的,不能驻留内存,运行时间完全由计划任务控制,运行环境需要winRAR5.0版本自带的winrar.exe文件,其它版本未尝试,不过应该问题不大。

功能上嘛,它可以每次运行时自动备分一个TXT文件下按固定格式写好的一个目录下的,复数个扩展名结尾的文件类型到,这个TXT文件里指定的目录(格式为“备份至某目录”;“备份目标文件目录”,如:“成本部_共用盘;\\192.168.1.1\公用盘”,有多少行就备分多少目录),脚本会自动保存同名文件的最近的两个改动版本且以“文件名_年月日时分”重命名,并自动把更旧版本的同名文件移动到另一个备份目录的RAR压缩文件里,压缩文件以“备份至某目录”_“XX年XX月”命名和生成。
备份同时也会自动生成备份日志到备份目的地目录。

大概功能就是以上,需要注意的是脚本不能复制目标目录的目录树结构,脚本识别文件版本完全以文件A属性为准,不能识别文件大小 和 比较文件内容,TXT文件中需要符号的话最好只用下画线,目标目录和目的目录必须用半角分号。
  1. echo off
  2. rem V1.0 基本功能完成
  3. rem V1.1 加入了开始倒计时提示,优化了变量操作,让适用于多人时改动更加容易。
  4. rem V1.2 进一步优化变量,让适用于多人时操作更少。
  5. rem V1.3 加入了备分日志功能
  6. rem v1.4 修正了时间获得上的空格错误
  7. rem v1.4.2 重设log日志生成到备分目录
  8. rem v2.0 1可同时备分多个任务,2更改为按文件名分别保留2个最近的文件版本,3其它改动。
  9. rem v2.1 改动了容易出错的find语句,优化了日志生成:备份文件列表等。
  10. rem v2.2 按人和月份区分压缩文件包,只保留最近7天的日志,其它删除到压缩文件。
  11. rem v2.3 用稳定性更好的copy+attrib组合代替xcopy+rename组合,修正了备份目标盘存在子目录时不能每个文件获得保留最近两个文件信息造成的错误.
  12. rem v2.4 日志中加入改名信息,增加对doc文件备分(共bat.txt.xls.doc)。
  13. rem v2.5 添加备份过程种的项目提示(某项开始,某项结束),文件备份前自动去HRS属性。
  14. rem v2.6 增加了部分注释,取消测试版本提示,备分文件确认,dir只对扩展名前三个字母有效,共.bat.txt.xls.xlsx.doc.docx
  15. set VER=V2.6
  16. cls
  17. for /l %%x in (9,-1,0) do (@ping -n 2 127.1 >nul 2>nul
  18. cls
  19. echo ============================================================================
  20. echo ===============          9秒钟后将会开始备分操作,         =================
  21. echo ===============              请勿请行其它操作。            =================
  22. echo ===============           如需取消备分,按Ctrl+c。         =================
  23. echo ===============                  版本 %VER%                 =================
  24. echo ============================================================================
  25. echo ===============               Waiting...%%x                  =================
  26. echo ============================================================================)
  27. cls
  28. echo ===========================================================================
  29. echo ===============             备分进行中……                =================
  30. echo ===========================================================================
  31. echo off
  32. rem 需备分目录(最后不带\)在bakname.txt文件中加入
  33. rem 备分至目录(最后不带\)
  34. set pathbak=f:\自动备分文件夹
  35. rem 备分文件回收站目录(最后不带\)
  36. set bakbak=f:\备分文件回收站
  37. rem 生成备分日志名
  38. set logname="%date:~5,2%月%date:~8,2%日%date:~11,3%"备份日志.txt
  39. if %time:~0,2% leq 9 (set ftime=0%time:~1,1%%time:~3,2%%time:~6,2%) else (set ftime=%time:~0,2%%time:~3,2%%time:~6,2%)
  40. set day=%date:~2,2%%date:~5,2%%date:~8,2%
  41. for /f "tokens=1,2 delims=;" %%n in (bakname.txt) do (
  42. if not exist "%pathbak%\%%n" (md "%pathbak%\%%n")
  43. echo      =================================================================
  44. echo            开始对《%%n》项目进行备份操作:
  45. echo ******%date%_%time%_备份日志****** >>%pathbak%\"%%n"\%logname%
  46. echo 需备分目录%%o >>%pathbak%\"%%n"\%logname%
  47. echo 备分至目录%pathbak%\%%n >>%pathbak%\"%%n"\%logname%
  48. echo.  >>%pathbak%\"%%n"\%logname%
  49. echo 本次需要备分的文件列表:  >>%pathbak%\"%%n"\%logname%
  50. for /f "delims=" %%i in ('dir /b /s /aa "%%o"\*.txt,"%%o"\*.bat,"%%o"\*.xls,"%%o"\*.doc') do (
  51. echo %%~nxi  >>%pathbak%\"%%n"\%logname%
  52. )
  53. echo.  >>%pathbak%\"%%n"\%logname%
  54. for /f "delims=" %%f in ('dir /b /s /aa "%%o"\*.txt,"%%o"\*.bat,"%%o"\*.xls,"%%o"\*.doc') do (
  55. echo [[[[[[开始对文件"%%~nxf"进行备份: >>%pathbak%\"%%n"\%logname%
  56. attrib -h -r -s "%%f"
  57. copy /v /y "%%f" "%pathbak%\%%n\%%~nf_%day%_%ftime%%%~xf" >>%pathbak%\"%%n"\%logname%
  58. echo 如复制成功则改名为"%%~nf_%day%_%ftime%%%~xf". >>%pathbak%\"%%n"\%logname%
  59. attrib -a "%%f"
  60. for /f "delims=" %%j in ('dir /s /b "%%o"\"%%~nf"*') do (
  61. rem skip属性调整同名文件保留的历史版本数
  62. for /f "skip=2 delims=" %%h in ('dir /o-d /tc /b %pathbak%\"%%n"\"%%~nf"*') do (
  63. rar a -df -ep1 "%bakbak%\%%n_%date:~2,2%年%date:~5,2%月.rar"  "%pathbak%\%%n\%%~nxh" >>%pathbak%\"%%n"\%logname%
  64. )
  65. )
  66. echo 文件"%%~nxf"操作结束]]]]]]  >>%pathbak%\"%%n"\%logname%
  67. echo.  >>%pathbak%\"%%n"\%logname%
  68. echo 文件"%%~nxf"备份操作结束.
  69. )
  70. echo ******本次备分结束****** >>%pathbak%\"%%n"\%logname%
  71. echo.  >>%pathbak%\"%%n"\%logname%
  72. echo.  >>%pathbak%\"%%n"\%logname%
  73. echo.  >>%pathbak%\"%%n"\%logname%
  74. rem 通过skip参数设定,只保留最近7天的日志,其它删除到压缩文件
  75. for /f "skip=7 delims=" %%b in ('dir /o-d /tc /b /s "%pathbak%\%%n\??月??日星期*.txt"') do rar a -df -ep1 -ap备份日志 "%bakbak%\%%n_%date:~2,2%年%date:~5,2%月.rar"  "%%b"
  76. echo                 《%%n》项目备份操作结束。
  77. echo      =================================================================
  78. echo.
  79. echo.
  80. echo.
  81. )
  82. @echo off
  83. echo =============================================================================
  84. echo ==============                 备份操作完成               ===================
  85. echo ==============             3秒后本自动窗口关闭            ===================
  86. echo ==============                                            ===================
  87. echo ==============                  测试版本 %VER%             ===================
  88. echo =============================================================================
  89. @ping -n 5 127.1 >nul 2>nul
复制代码
2

评分人数

返回列表