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

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

本帖最后由 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
复制代码

本帖最后由 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

评分人数

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

TOP

谢谢,测试可用,简单了许多,学习了。
  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. )
复制代码

TOP

返回列表