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

[文件操作] 批处理如何判断文件修改日期并移动到某空间?

[复制链接]
发表于 2015-7-22 11:02:38 | 显示全部楼层 |阅读模式
求助各位老师,本人在公司里做运维,因服务器硬盘空间所限,所以把数据库备份放在3个空间,本机G:\Data_cope\,是数据每天自动备份,本机I:\SQL_DB_BAK\,是另外一个存储的空间,局域网共享\\192.168.163.2\可写入\oa_db_bak\是第三个可写入共享空间。
举个例比如今天是20号,局域网可以保留13天的数据,本机I盘可以保留6天,本机G盘可以保留6天.程序先比较局域网共享的备份文件,如果超过25天的数据会删除,再去比较I盘,如果超过12天的移动到局域网共享空间,最后去比较G盘,如果超过6天会移动到I盘。代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. ::设置服务器绝对路径。
  3. set services=\\192.168.163.2\可写入\oa_db_bak\
  4. ::设置日常数据库备份路径。
  5. set dbbak=G:\Data_cope\
  6. ::设置临时存储数据库路径。
  7. set linshi=I:\SQL_DB_BAK\
  8. ::设置日志路径。
  9. set logtxt=\\192.168.163.2\可写入\log\
  10. ::设置瑞星杀毒服务器(192.168.163.2)数据库保留的天数
  11. set DaysAgo=25
  12. ::设置临时存储(I盘)数据库保留的天数。
  13. set DaysAgo1=12
  14. ::设置日常数据库(G盘)备份保留的天数。
  15. set DaysAgo2=6

  16. ::获取当前日期字符串(d为年月日,t为时分秒,dt为年月日时分秒)。
  17. for /f "tokens=1,2,3 delims=/- " %%a in ("%date%") do @set D=%%a-%%b-%%c
  18. rem echo 获取当前时间字符串
  19. for /f "tokens=1,2,3 delims=:." %%a in ("%time%") do @set T=%%a:%%b:%%c
  20. rem echo 如当前小时小于10,将空格替换为0
  21. set T=%T: =0%
  22. set dt=%D% %T%

  23. ::计算离今天相差“DaysAgo”之前的日期。
  24. >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo%
  25. >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day

  26. (LastDate),2)
  27. >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
  28. for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  29.     set DstDate=%%a
  30. )
  31. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  32. echo %DaysAgo%天之前的日期是:%DstDate%。
  33. echo 正在删除%DstDate%之前的备份数据库..
  34. for /r "%services%" %%i in (*) do (
  35. set str=%%~ti
  36. set str=!str:~0,10!
  37. ::str为获取指定文件的修改日期。
  38. if !str! LEQ %DstDate% del "%%i"
  39. )
  40. echo 机房服务器超过%DaysAgo%天之前在%dt%已经删除。|>>"%logtxt%%d%.txt"
  41. echo 机房服务器超过%DaysAgo%天之前在%dt%已经删除。

  42. echo 正在处理本机I盘数据库备份文件。
  43. ::计算离今天与%DaysAgo1%之前的日期。
  44. >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo1%
  45. >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day

  46. (LastDate),2)
  47. >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
  48. for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  49.     set DstDate=%%a
  50. )
  51. set DstDate1=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  52. echo %DaysAgo1%天之前的日期是:%DstDate1%。
  53. for /r "%linshi%" %%j in (*) do (
  54. set str=%%~ti
  55. set str=!str:~0,10!
  56. ::str为获取指定文件的修改日期。
  57. if !str! LEQ %DstDate1% move "%%j" "%services%"
  58. )
  59. echo 本机I盘数据库备份超过%DaysAgo1%天之前在%dt%已经移动到%services%。|>>"%logtxt%%d%.txt"
  60. echo 本机I盘数据库备份超过%DaysAgo1%天之前在%dt%已经移动到%services%。
  61. pause

  62. echo 正在处理本机G盘数据库备份文件。
  63. ::计算离今天与%DaysAgo2%之前的日期。
  64. >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo2%
  65. >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day

  66. (LastDate),2)
  67. >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
  68. for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  69.     set DstDate=%%a
  70. )
  71. set DstDate2=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  72. echo %DaysAgo2%天之前的日期是:%DstDate2%。
  73. for /r "%dbbak%" %%k in (*) do (
  74. set str=%%~ti
  75. set str=!str:~0,10!
  76. ::str为获取指定文件的修改日期。
  77. if !str! LEQ %DaysAgo2% move "%%k" "%linshi%"
  78. )
  79. echo 本机G盘数据库备份超过%DaysAgo2%天之前在%dt%已经移动到%linshi%。|>>"%logtxt%%d%.txt"
  80. echo 本机G盘数据库备份超过%DaysAgo2%天之前在%dt%已经移动到%linshi%。
复制代码
现在问题来了,
1.增加一个功能,比如程序比较文件时先PING一个局域网共享IP,如果不通,刚在本机某个目录记录哪个时间不通。如果通就执行文件移动操作。
2.获取的时间在移动后都是一样,这个应该在哪里增加,让代码结果显示哪个时间完成操作的?
3.不想代码太过冗长,所以哪里有简短代码的地方?
发表于 2015-7-22 12:17:40 | 显示全部楼层
如果你的系统里面有 forfiles 命令,可以参考方案5
http://bbs.bathome.net/thread-3334-1-1.html

这样就不必动态生成vbs来计算日期了,可以大大缩短代码行数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 22:43 , Processed in 0.017007 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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