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

[文件操作] 批处理如何全盘查找AAA\BBB文件夹,并且删除文件夹中最早创建的文件?

如题:在每天打开电脑的时候能够自动运行,自动全盘查找AAA\BBB文件夹,如果该盘符的剩余大小小于10g,那么删除文件夹中最早创建的文件。
我是个新手,不太会这个。但是我想先说说我的思路看看这个对不对。
1,首先自动运行我想的是做好以后放入启动项里,每天开机后就能够调用
2,全盘查找我想的是dir d: /ad /s这样能看到所有目录然后连接|findstr AAA\BBB,这样就能找到目录,我只需要去第一个就是我想要的目录地址。问题来了cmd下正常输出,但是批处理里面就输出不了,感觉像是那个" \ "斜线的问题
3,也是dir 找到剩余的空间大小小于10g就执行下面的
4,dir AAA\BBB目录地址 /od /s /b 就是得到安时间排序的目录表,我试了一下,问题又来了这个排序是在同一个文件夹下获得的排序,也就是说如果这些文件分别放在几个目录下,是他们在这些子目录下的排序,不是所有放在一起的排序。
哎~求救啊~

  1. dir /ad/s/b |findstr /iec:"\AAA\BBB"
复制代码

TOP

回复 2# terse


    额,怎么说呢 我是希望有人能帮我看看整个思路可行不可行,如果可行 ,那么我的具体实现上哪里需要更改。希望能详细一点

TOP

回复 3# fl0329
那就一个文件一个文件的对比
起始将最早文件的创建时间定义给变量, 并且标记文件路径
然后和每个文件的创建时间作对比,如果当前文件早于之前定义的时间,那么重新标记当前文件,同时将时间的变量定义为当前文件的创建时间。

TOP

回复 2# terse


   你给的代码运行不了啊。dir d: /ad /s|findstr AAA\BBB这样是可以运行的,因为我想把dir d: /ad /s|findstr AAA\BBB运行结果给取出来。不知道是不是这个思路。然后就有了for /f %%i in ('dir d: /ad /s|findstr AAA\BBB') do echo %%i但是在for循环中不知道为什么处理不了。

TOP

看看什么结果
  1. @echo off
  2. for /f "delims=" %%i in ('dir /ad/s/b ^|findstr /iec:"\AAA\BBB"') do echo %%i
  3. pause
复制代码

TOP

回复 6# terse


   恩,可以了,但是后面的时候又出问题了。我用fsutil volume diskfree可以获得盘符的剩余空间,但是做加减的时候他就说 无效数字,数字精度为32位。弄了很久也没弄好,就直接舍弃了后9位数用来进行比对。
本来这样算个大概还是可以的,但是又在按时间删除哪里卡主了,不知道怎么弄了。 高手帮帮忙啊

TOP

回复 6# terse


    求老师帮忙,自己顶一下

TOP

本帖最后由 terse 于 2015-6-9 12:02 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set Md=1048576
  3. for /f "skip=1tokens=1,2" %%a in ('wmic logicaldisk where "drivetype='3'" get name^,freespace') do (
  4.     for /f %%a in ("%%a") do if not defined b (
  5.         for /f "tokens=*" %%i in ('dir /ad/s/b %%b^|findstr /iec:"\AAA\BBB"') do (
  6.             for /f "tokens=*" %%i in ("%%i") do (
  7.                 set "len=0"
  8.                 set "free=%%a00"
  9.                 set "s=!free!"
  10.                 for %%i in (16 8 4 2 1) do if "!s:~%%i!" neq "" set/a len+=%%i&set "s=!s:~%%i!"
  11.                 set/a "rder=!free:~,8!%%Md,g=!free:~,8!/Md"
  12.                 for /l %%j in (8 1 !len!) do (
  13.                     set/a "qent=!rder!!free:~%%j,1!/Md,rder=!rder!!free:~%%j,1!%%Md"
  14.                     set "g=!g!!qent!"
  15.                 )
  16.                     if !g! lss 1024000 (
  17.                        for /f "tokens=*" %%j in ('dir /a-d/o-d/b "%%i" 2^>nul') do (
  18.                            set "b=%%i\%%j"
  19.                        )
  20.                     )
  21.             )
  22.         )
  23.     )
  24. )
  25. if defined b echo;!b!
  26. pause
复制代码

TOP

返回列表