标题: [文件操作] 批处理怎样对多个目录内的文件进行依次操作? [打印本页]
作者: fireredfox 时间: 2011-11-14 11:05 标题: 批处理怎样对多个目录内的文件进行依次操作?
如上图有两个文件夹,每个文件夹内的文件名称相同,现在想用批处理删除456 789内3天前的文件夹。将来可能或有多个文件夹,不单单只有 456 和789 两个文件。
我想到的是先遍历出所有的文件夹,然后进行删除操作。我现在只遍历处了文件,后面的没有思路了!请各位指教一下!
遍历脚本for /f "delims=" %i in ('dir /s /ad /b "f:\123"') do @echo %i >>f:\123\345.txt
作者: fireredfox 时间: 2011-11-14 12:09
对上述问题做详细说明
文件目录结构 盘符:\\task\id\以日期命名的文件夹\文件
要求 删除task文件夹下 以不同id命名的文件夹 内10天前的文件夹
作者: heyoug 时间: 2011-11-14 18:45
如果当前日期是 10号以后很好判断
如果小于10 就要去计算上个月的最大天数
如果是2月还要计算闰月否
以前做过一个备份3天内的文件,感觉有点麻烦。
作者: yyykkkyyyy 时间: 2011-11-14 21:56
本帖最后由 yyykkkyyyy 于 2011-11-14 22:45 编辑
感觉~做过一个备份3天的~麻烦,那就是会写啰
日期计算要用vbs的简单,纯批处理日期总是有那些麻烦...我就献丑了- @echo off&setlocal enabledelayedexpansion
- set n=3
-
- rem ===============计 n 天前的日期============================
- set/a y=%date:~,4%,m=1%date:~5,2%,d=1%date:~8,2%-n
- :r
- if %d% leq 100 (
- rem 先统一按每月31天计,之后修正======
- set/a d+=31
- set/a m-=1
- if !m! equ 100 set/a "m+=12,y-=1"
- echo !m:~-2!|findstr/x "04 06 09 11">nul&&set/a d-=1
- if !m! equ 102 set/a "d-=3-^!(y&3)+^!(y%%100)-^!(y%%400)"
- goto :r)
- set ymd=%y%%m:~-2%%d:~-2%
- echo 准备删除 %ymd% 之前的日期文件夹
-
- :: ==============查找文件夹名为8个数组成的文件夹===========
- :: 如果含有不是日期又是8位数组成的文件夹名则可能会误删,这里只显示并不删
-
- for /L %%i in (1 1 8)do set ds=!ds![0-9]
- for /f "delims=" %%i in ('dir/b/ad/s^|findstr/e "\\%ds%"')do (
- if "%%~ni" leq "%ymd%" echo rd/s/q "%%i")
- pause
复制代码
作者: fireredfox 时间: 2011-11-15 15:44
非常感谢给各位兄弟,还有一个最主要的问题,怎样自动切换以不同id命名的文件夹啊,id是会不断增加的!
作者: yyykkkyyyy 时间: 2011-11-15 23:32
本帖最后由 yyykkkyyyy 于 2011-11-15 23:35 编辑
回复 5# fireredfox
看来是把我那代码的批处理放一个id文件夹下去执行了
只要是确定你说的那些id不是纯8位数为名, 我那代码是带子文件夹一起处理的,就是说批处理要放那些id文件夹并列位置就都"自动"处理了,如果把
if "%%~ni" leq "%ymd%" echo rd/s/q "%%i") 里的 echo 去掉就是真正删除了,符合条件的文件夹带它下面的文件及子文件夹一起删,且不会有提示,除非你有备份,不然都应先测试
作者: Batcher 时间: 2011-11-16 17:17
回复 3# heyoug
有现成的函数可以调用:
批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |