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

[日期时间] 【已解决】批处理删除按照“年月”为名称建立文件夹遇到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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 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%"
复制代码
1

评分人数

TOP

回复 2# neorobin


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

TOP

返回列表