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

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

[复制链接]
发表于 2011-11-14 11:05:50 | 显示全部楼层 |阅读模式
如上图有两个文件夹,每个文件夹内的文件名称相同,现在想用批处理删除456 789内3天前的文件夹。将来可能或有多个文件夹,不单单只有 456 和789 两个文件。
我想到的是先遍历出所有的文件夹,然后进行删除操作。我现在只遍历处了文件,后面的没有思路了!请各位指教一下!
遍历脚本for /f "delims=" %i in ('dir /s /ad /b "f:\123"') do @echo %i  >>f:\123\345.txt
 楼主| 发表于 2011-11-14 12:09:31 | 显示全部楼层
对上述问题做详细说明
文件目录结构 盘符:\\task\id\以日期命名的文件夹\文件
要求 删除task文件夹下 以不同id命名的文件夹 内10天前的文件夹
发表于 2011-11-14 18:45:13 | 显示全部楼层
如果当前日期是 10号以后很好判断
如果小于10 就要去计算上个月的最大天数
如果是2月还要计算闰月否
以前做过一个备份3天内的文件,感觉有点麻烦。
发表于 2011-11-14 21:56:29 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-11-15 15:44:50 | 显示全部楼层
非常感谢给各位兄弟,还有一个最主要的问题,怎样自动切换以不同id命名的文件夹啊,id是会不断增加的!
发表于 2011-11-15 23:32:28 | 显示全部楼层
本帖最后由 yyykkkyyyy 于 2011-11-15 23:35 编辑

回复 5# fireredfox

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


有现成的函数可以调用:

批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 05:32 , Processed in 0.018820 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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