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

[文件操作] 批处理怎样对多个目录内的文件进行依次操作?

如上图有两个文件夹,每个文件夹内的文件名称相同,现在想用批处理删除456 789内3天前的文件夹。将来可能或有多个文件夹,不单单只有 456 和789 两个文件。
我想到的是先遍历出所有的文件夹,然后进行删除操作。我现在只遍历处了文件,后面的没有思路了!请各位指教一下!
遍历脚本for /f "delims=" %i in ('dir /s /ad /b "f:\123"') do @echo %i  >>f:\123\345.txt

对上述问题做详细说明
文件目录结构 盘符:\\task\id\以日期命名的文件夹\文件
要求 删除task文件夹下 以不同id命名的文件夹 内10天前的文件夹

TOP

如果当前日期是 10号以后很好判断
如果小于10 就要去计算上个月的最大天数
如果是2月还要计算闰月否
以前做过一个备份3天内的文件,感觉有点麻烦。

TOP

本帖最后由 yyykkkyyyy 于 2011-11-14 22:45 编辑

感觉~做过一个备份3天的~麻烦,那就是会写啰
日期计算要用vbs的简单,纯批处理日期总是有那些麻烦...我就献丑了
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=3
  3. rem ===============计 n 天前的日期============================
  4. set/a y=%date:~,4%,m=1%date:~5,2%,d=1%date:~8,2%-n
  5. :r
  6. if %d% leq 100 (
  7. rem 先统一按每月31天计,之后修正======
  8.    set/a d+=31
  9.    set/a m-=1
  10.    if !m! equ 100 set/a "m+=12,y-=1"
  11.    echo !m:~-2!|findstr/x "04 06 09 11">nul&&set/a d-=1
  12.    if !m! equ 102 set/a "d-=3-^!(y&3)+^!(y%%100)-^!(y%%400)"
  13.    goto :r)
  14. set ymd=%y%%m:~-2%%d:~-2%
  15. echo 准备删除 %ymd% 之前的日期文件夹
  16. :: ==============查找文件夹名为8个数组成的文件夹===========
  17. :: 如果含有不是日期又是8位数组成的文件夹名则可能会误删,这里只显示并不删
  18. for /L %%i in (1 1 8)do set ds=!ds![0-9]
  19. for /f "delims=" %%i in ('dir/b/ad/s^|findstr/e "\\%ds%"')do (
  20.   if "%%~ni" leq "%ymd%" echo rd/s/q "%%i")
  21. pause
复制代码

TOP

非常感谢给各位兄弟,还有一个最主要的问题,怎样自动切换以不同id命名的文件夹啊,id是会不断增加的!

TOP

本帖最后由 yyykkkyyyy 于 2011-11-15 23:35 编辑

回复 5# fireredfox

看来是把我那代码的批处理放一个id文件夹下去执行了
只要是确定你说的那些id不是纯8位数为名, 我那代码是带子文件夹一起处理的,就是说批处理要放那些id文件夹并列位置就都"自动"处理了,如果把
if "%%~ni" leq "%ymd%" echo rd/s/q "%%i") 里的 echo 去掉就是真正删除了,符合条件的文件夹带它下面的文件及子文件夹一起删,且不会有提示,除非你有备份,不然都应先测试

TOP

回复 3# heyoug


有现成的函数可以调用:

批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表