Board logo

标题: [日期时间] 【已解决】批处理删除按照“年月”为名称建立文件夹遇到08月09月时的问题,谢谢 [打印本页]

作者: ckevin    时间: 2014-9-24 15:38     标题: 【已解决】批处理删除按照“年月”为名称建立文件夹遇到08月09月时的问题,谢谢

本帖最后由 ckevin 于 2014-9-25 09:30 编辑

原意是这样的,我有如下名称的一些备份文件夹,里面都有备份的数据。现在想写个批处理每月1号自动删除名称为2月以前的备份目录
201308
201309
201310
201311
201312
201401
201402
201403
201405
201406
201407
201408
201409
我自己写了一个但遇到8月9月的时候,就会报错,请各位帮忙指点一下,谢谢!
我的批处理如下:
  1. set year=%date:~0,4%
  2. set month=%date:~5,2%
  3. set day=%date:~8,2%
  4. set mydate=%year%%month%%day%
  5. set mymonth=%year%%month%
  6. set filename=oracle9备份%mydate%
  7. set sfilepath=备份\\%mymonth%
  8. E:
  9. cd \
  10. rem -------在每个月的1号删除前面2个月的备份--------------
  11. if %day%==01 goto :del_file
  12. echo exit
  13. :del_file
  14. if %month% leq 2  set /a delyear=%year%-1  
  15. if %month% gtr 2  set /a delyear=%year%
  16. if %month% leq 2  set /a delmonth=%month%+10
  17. if %month% gtr 2  set /a delmonth=%month%-2
  18. set delforder=%delyear%%delmonth%
  19. if %day%==01 rd /Q /S 备份\\%delforder%
  20. echo exit
复制代码

作者: neorobin    时间: 2014-9-24 17:19

回复 1# ckevin


08  09   都是以  0   开头,  在 set /a 运算中被解释成 8 进制数,  但又是非法的, 因为 8 进制数只能有 [0,1,2,3,4,5,6,7] 这 8 个数码

将你代码中 14 -- 17 行可以改成如下
  1. set /a "m=1%month%-100, s=m-3>>31, delyear=year+s, m-=2, m+=s&12,m+=100"
  2. set "delmonth=%m:~-2%"
复制代码

作者: ckevin    时间: 2014-9-25 09:29

回复 2# neorobin


    谢谢老大,我的问题解决了,麻烦方便的时候能给解释一下这个表达式吗。特别是s=m-3>>31, delyear=year+s, m-=2, m+=s&12,m+=100这几处,谢谢。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2