Board logo

标题: [文本处理] [已解决]批处理如何删除文件名中的日期小于/等于/大于指定日期的文件 [打印本页]

作者: 7016427    时间: 2015-5-16 15:10     标题: [已解决]批处理如何删除文件名中的日期小于/等于/大于指定日期的文件

本帖最后由 pcl_test 于 2016-7-16 14:34 编辑

我想删除d:\aa\下,小于20131231的所有文件,文件名格式:成都yyyymmdd.xls。请问老师代码怎么写?
如果文件名是:成都【yyyymmdd】.xls
作者: dizimotong    时间: 2015-5-16 23:03

  1. @echo off&&setlocal EnableDelayedExpansion
  2. cd /d d:\aa\
  3. mkdir tmp
  4. for /f %%i in ('dir /a:-d /b') do (
  5. set filename=%%i
  6. set year=!filename:~0,4!
  7. if "!year!" leq "2013" move %%i tmp/>nul
  8. )
  9. cd tmp
  10. move 20131231.xls ..\>nul
  11. del /q *
  12. cd ..
  13. rmdir tmp
  14. pause
复制代码
希望这段代码能够帮助你
作者: 7016427    时间: 2015-5-17 09:04     标题: [待完善] 请教老师,bat按指定日期删除文件写法

本帖最后由 7016427 于 2015-5-17 12:28 编辑

[待完善]回复 2# dizimotong
你好!执行时提示,系统找不到文件,实际已删除满足条件的文件了!
作者: 7016427    时间: 2015-5-17 09:06

本帖最后由 7016427 于 2015-5-17 12:53 编辑

[执行截图]回复 3# 7016427
作者: dizimotong    时间: 2015-5-17 13:39

你好,我大概知道怎么回事了,我想你应该没有20131231.xls这个文件导致的。
建议将
  1. move 20131231.xls ..\>nul
复制代码
删掉或者改成
  1. move 20131231.xls ..\>nul 2>&1
复制代码
应该就能解决你说的问题了
作者: 7016427    时间: 2015-5-17 14:26     标题: RE: 【修改】请教老师,bat按指定日期删除文件写法

回复 5# dizimotong
你好!如果我的文件名格式是:成都【yyyy年mm月】.xls,我要删除2013年12月前的所有文件,请问这个代码怎么修改?
作者: 7016427    时间: 2015-5-17 14:29     标题: 【求助】请教老师,bat按指定日期删除文件写法

回复 5# dizimotong

你好!如果我的文件名格式是:成都【yyyy年mm月】.xls,我要删除2013年12月前的所有文件,请问这个代码怎么修改?
作者: dizimotong    时间: 2015-5-17 16:18

  1. @echo off&&setlocal EnableDelayedExpansion
  2. cd /d d:\aa\
  3. mkdir tmp
  4. for /f %%i in ('dir /a:-d /b') do (
  5. set filename=%%i
  6. set year=!filename:~0,4!
  7. if "!year!" leq "2013" move %%i tmp/>nul
  8. )
  9. cd tmp
  10. move 2013年12月* ..\>nul
  11. del /q *
  12. cd ..
  13. rmdir tmp
  14. pause
复制代码

作者: 7016427    时间: 2015-5-17 16:54     标题: 【急!未解决】请教老师,bat按指定日期删除文件写法

回复 8# dizimotong
我的文件名是:成都【2013年01月】.xls、成都【2013年02月】.xls、成都【2013年03月】.xls、成都【2013年04月】.xls .........
执行代码后未删除!
作者: dizimotong    时间: 2015-5-17 17:19

本帖最后由 dizimotong 于 2015-5-17 17:20 编辑
  1. @echo off&&setlocal EnableDelayedExpansion
  2. cd /d d:\aa\
  3. mkdir tmp
  4. for /f %%i in ('dir /a:-d /b') do (
  5. set filename=%%i
  6. set year=!filename:~3,4!
  7. if "!year!" leq "2013" move %%i tmp/>nul
  8. )
  9. cd tmp
  10. move 成都【2013年12月* ..\>nul
  11. del /q *
  12. cd ..
  13. rmdir tmp
  14. pause
复制代码
试一下,这个行不行。
作者: 7016427    时间: 2015-5-17 17:42

回复 10# dizimotong
我测试错误!提示:存在一个重名文件,或是找不到文件。
作者: dizimotong    时间: 2015-5-17 18:01

我想先问一下,你想删的文件是否成功删除了。
如果是的话,说明代码没有太大问题。
想要取消提示可以将
  1. move 成都【2013年12月* ..\>nul
复制代码
改为
  1. move 成都【2013年12月* ..\>nul 2>&1
复制代码

作者: 7016427    时间: 2015-5-17 18:12

回复 12# dizimotong
没有成功删除文件!
作者: dizimotong    时间: 2015-5-17 18:26

我这边测试没问题,是不是你的文件的文件名有空格,方便的话上传一个文件给我测试一下。
作者: 7016427    时间: 2015-5-17 19:15

回复 14# dizimotong
请问老师,bat批处理文件对文件名,长度是否有限制?如果文件名为“特殊退票登记簿【2013年10月】.xls”这个时,始终删除不了!
作者: dizimotong    时间: 2015-5-17 19:41

你如果用我之前的批处理删除这种文件名为“特殊退票登记簿【XXXX年XX月】.xls”格式的文件肯定不行的,因为我就是利用文件名的特点去编写的。如果你确定要删除“特殊退票登记簿【XXXX年XX月】.xls”格式的文件的话,试一下下面代码吧:(前提是你的文件名格式最好统一)
  1. @echo off&&setlocal EnableDelayedExpansion
  2. cd /d d:\aa\
  3. mkdir tmp
  4. for /f %%i in ('dir /a:-d /b') do (
  5. set filename=%%i
  6. set year=!filename:~8,4!
  7. if "!year!" leq "2013" move %%i tmp/>nul
  8. )
  9. cd tmp
  10. move 特殊退票登记簿【2013年12月* ..\>nul 2>&1
  11. del /q *
  12. cd ..
  13. rmdir tmp
  14. pause
复制代码
还有一点你的文件目录是否是d:\aa\,如果不是你自救修改一下上面代码
  1. cd /d d:\aa\
复制代码
的目录,ok?
作者: 7016427    时间: 2015-5-17 20:15     标题: 【已解决】请教老师,bat按指定日期删除文件写法

[谢谢!]回复 16# dizimotong




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