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

[文件操作] [已解决]求助优化windows2003文件服务器的备份bat代码

[复制链接]
发表于 2017-9-16 20:31:15 | 显示全部楼层 |阅读模式
本帖最后由 cLeoLiuyin 于 2017-9-16 22:19 编辑

新手第一次尝试自己编写bat实战文件服务器备份,已经测试初步达成目标,但是仍然存在缺陷。
缺陷1:如果需要增加需要备份的路径,则需要新增变量,并且新增代码段
缺陷2:如果目标服务器文件已经删除,不会自动删除备份中的历史文件

学习目的1:简单代码的使用,仅此一,无需二,意思是不希望通过准备一个配置txt文件存放需要备份的变量信息,然后运行一个bat来读,也不希望额外生成临时文件来存放变量信息,for来取变量值,用简单代码实现。
学习目的2:通过简单代码,重构类似数组,robocopy功能,毕竟windows 2003本身无该功能。

求教各位大仙,优化我的bat脚本,谢谢。

环境:windows 2003服务器
目标:备份另一台文件服务器上的共享文件夹内制定目录下的文件(通过计划任务定期周六晚上启动该脚本进行备份更新)
代码:

  1. @echo off

  2. rem 设置变量backupfrom,需要备份文件的完整目标路径
  3. set s_bk_from=\\172.16.0.12
  4. rem 设置变量backupto存入备份文件的完整路径,例如:f:\itdata或者\\172.16.0.6
  5. set s_bk_to=g:\backup

  6. rem 设置变量s_01至s_99需要备份的文件夹名称,增加一个变量,需要检查下面是否同步COPY了改变量的处理过程
  7. rem 如果路径名中包含特殊字符串,需要用转移字符标识,例如Print&Dye需要写为Print^&Dye
  8. set s_01=Account
  9. set s_02=Cwong
  10. set s_03=TimeCard
  11. set s_04=Sales
  12. set s_05=Print^&Dye
  13. set s_06=it-b\IKO-CLUB-WORK
  14. set s_07=it-b\IT工作
  15. set s_08=it-b\源文件
  16. set s_09=it-b\系统运行文件
  17. set s_10=it-b\系统
  18. set s_11=it-b\软件

  19. rem 如果存放备份文件的路径不存在,则先创建用于存放备份文件的文件夹
  20. if not exist "%s_bk_to%" md "%s_bk_to%"
  21. rem 需要进入到存放备份文件的磁盘跟目录下,才可以对该盘进行读写操作
  22. %s_bk_to:~0,2%
  23. cd "%s_bk_to%"

  24. rem 备份变量s_01目录文件
  25. if not exist "%s_01%" md "%s_01%"
  26. xcopy "%s_bk_from%\%s_01%" "%s_bk_to%\%s_01%" /s/e/d/y

  27. rem 备份变量s_02目录文件
  28. if not exist "%s_02%" md "%s_02%"
  29. xcopy "%s_bk_from%\%s_02%" "%s_bk_to%\%s_02%" /s/e/d/y

  30. rem 备份变量s_03目录文件
  31. if not exist "%s_03%" md "%s_03%"
  32. xcopy "%s_bk_from%\%s_03%" "%s_bk_to%\%s_03%" /s/e/d/y

  33. rem 备份变量s_04目录文件
  34. if not exist "%s_04%" md "%s_04%"
  35. xcopy "%s_bk_from%\%s_04%" "%s_bk_to%\%s_04%" /s/e/d/y

  36. rem 备份变量s_05目录文件
  37. if not exist "%s_05%" md "%s_05%"
  38. xcopy "%s_bk_from%\%s_05%" "%s_bk_to%\%s_05%" /s/e/d/y

  39. rem 备份变量s_06目录文件
  40. if not exist "%s_06%" md "%s_06%"
  41. xcopy "%s_bk_from%\%s_06%" "%s_bk_to%\%s_06%" /s/e/d/y

  42. rem 备份变量s_07目录文件
  43. if not exist "%s_07%" md "%s_07%"
  44. xcopy "%s_bk_from%\%s_07%" "%s_bk_to%\%s_07%" /s/e/d/y

  45. rem 备份变量s_08目录文件
  46. if not exist "%s_08%" md "%s_08%"
  47. xcopy "%s_bk_from%\%s_08%" "%s_bk_to%\%s_08%" /s/e/d/y

  48. rem 备份变量s_09目录文件
  49. if not exist "%s_09%" md "%s_09%"
  50. xcopy "%s_bk_from%\%s_09%" "%s_bk_to%\%s_09%" /s/e/d/y

  51. rem 备份变量s_10目录文件
  52. if not exist "%s_10%" md "%s_10%"
  53. xcopy "%s_bk_from%\%s_10%" "%s_bk_to%\%s_10%" /s/e/d/y

  54. rem 备份变量s_11目录文件
  55. if not exist "%s_11%" md "%s_11%"
  56. xcopy "%s_bk_from%\%s_11%" "%s_bk_to%\%s_11%" /s/e/d/y
复制代码
发表于 2017-9-16 21:12:36 | 显示全部楼层
本帖最后由 bbaa 于 2017-9-16 21:18 编辑

无法保证旧版本CMD是否能正常运行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 设置变量backupfrom,需要备份文件的完整目标路径
  4. set s_bk_from=\\172.16.0.12
  5. rem 设置变量backupto存入备份文件的完整路径,例如:f:\itdata或者\\172.16.0.6
  6. set s_bk_to=g:\backup

  7. rem 设置变量s_01至s_99需要备份的文件夹名称,每增加一个变量,需要检查下面是否同步COPY了改变量的处理过程
  8. rem 如果路径名中包含特殊字符串,需要用转移字符标识,例如Print&Dye需要写为Print^&Dye
  9. for %%i in (
  10.         "Account"
  11.         "Cwong"
  12.         "TimeCard"
  13.         "Sales"
  14.         "Print^&Dye"
  15.         "it-b\IKO-CLUB-WORK"
  16.         "it-b\IT工作"
  17.         "it-b\源文件"
  18.         "it-b\系统运行文件"
  19.         "it-b\系统"
  20.         "it-b\软件"
  21. ) do (
  22.         set "s_!Count!=%%~i"
  23.         set /a Count+=1
  24. )

  25. rem 如果存放备份文件的路径不存在,则先创建用于存放备份文件的文件夹
  26. if not exist "%s_bk_to%" md "%s_bk_to%"
  27. rem 需要进入到存放备份文件的磁盘根目录下,才可以对该盘进行读写操作
  28. %s_bk_to:~0,2%
  29. cd /d "%s_bk_to%"

  30. rem 备份文件
  31. for /f "delims== tokens=2" %%i in ('Set S_') do (
  32.         md %%~i>nul 2>nul
  33.         xcopy "%s_bk_from%\%%~i" "%s_bk_to%\%%~i" /s/e/d/y
  34. )
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 设置变量backupfrom,需要备份文件的完整目标路径
  4. set s_bk_from=\\172.16.0.12
  5. rem 设置变量backupto存入备份文件的完整路径,例如:f:\itdata或者\\172.16.0.6
  6. set s_bk_to=g:\backup

  7. rem 如果路径名中包含特殊字符串,需要用转移字符标识,例如Print&Dye需要写为Print^&Dye
  8. rem 如果存放备份文件的路径不存在,则先创建用于存放备份文件的文件夹
  9. if not exist "%s_bk_to%" md "%s_bk_to%"
  10. rem 需要进入到存放备份文件的磁盘根目录下,才可以对该盘进行读写操作
  11. %s_bk_to:~0,2%
  12. cd /d "%s_bk_to%"
  13. rem 每增加一个变量,需要检查下面是否同步COPY了改变量的处理过程
  14. for %%i in (
  15.         "Account"
  16.         "Cwong"
  17.         "TimeCard"
  18.         "Sales"
  19.         "Print^&Dye"
  20.         "it-b\IKO-CLUB-WORK"
  21.         "it-b\IT工作"
  22.         "it-b\源文件"
  23.         "it-b\系统运行文件"
  24.         "it-b\系统"
  25.         "it-b\软件"
  26. ) do (
  27.         md %%~i>nul 2>nul
  28.         xcopy "%s_bk_from%\%%~i" "%s_bk_to%\%%~i" /s/e/d/y
  29. )
复制代码

评分

参与人数 2技术 +2 收起 理由
cLeoLiuyin + 1 将重复代码操作的变量,加入到for的参数里循 ...
老刘1号 + 1 乐于助人

查看全部评分

 楼主| 发表于 2017-9-16 22:17:51 | 显示全部楼层
谢谢,测试可用,简单了许多,学习了。

  1. @echo off

  2. rem 设置变量backupfrom,需要备份文件的完整目标路径
  3. set s_bk_from=\\172.16.0.12
  4. rem 设置变量backupto存入备份文件的完整路径,例如:f:\itdata或者\\172.16.0.6
  5. set s_bk_to=g:\backup

  6. rem 需要进入到存放备份文件的磁盘跟目录下,才可以对该盘进行读写操作
  7. if not exist "%s_bk_to%" md "%s_bk_to%"
  8. %s_bk_to:~0,2%
  9. cd "%s_bk_to%"

  10. rem 需要备份的文件夹,添加到for里,循环处理备份工作
  11. for %%i in (
  12.         "Account"
  13.         "Cwong"
  14.         "TimeCard"
  15.         "Sales"
  16.         "Print&Dye"
  17.         "it-b\IKO-CLUB-WORK"
  18.         "it-b\IT工作"
  19.         "it-b\源文件"
  20.         "it-b\系统运行文件"
  21.         "it-b\系统"
  22.         "it-b\软件"
  23. ) do (
  24.         md %%~i>nul 2>nul
  25.         xcopy "%s_bk_from%\%%~i" "%s_bk_to%\%%~i" /s/e/d/y
  26. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:36 , Processed in 0.020269 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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