批处理文件:如果文件夹中有子文件夹,如何删除按日期排序的文件?

时间:2014-10-09 10:02:52

标签: batch-file

以下是一个例子:

共有4个文件:

C:\Test\1002.bak                  -- Created on Oct 2nd,2014
C:\Test\1009.bak                  -- Created on Oct 9th,2014
C:\Test\subfolder\1001.bak        -- Created on Oct 1st,2014
C:\Test\subfolder\1008.bak        -- Created on Oct 8th,2014

我想要一个批处理文件来删除按日期排序的旧文件,所有文件都包括子文件夹。

它的排序方式如下:

C:\Test\subfolder\1001.bak 
C:\Test\1002.bak                  
C:\Test\subfolder\1008.bak        
C:\Test\1009.bak  

但是,如果我运行以下命令,结果已被子文件夹分隔。 例如," dir / a-d / od / s>的Result.txt"

的Result.txt:

 Volume in drive C has no label.
 Volume Serial Number is AADB-DB05

 Directory of c:\test

2014/10/02  11:40         4,220,416 1002.bak
2014/10/09  07:02     1,453,321,216 1009.bak
2014/10/09  18:44                 0 result.txt
               3 File(s)  1,457,541,632 bytes

 Directory of c:\test\subfolder

2014/10/01  10:51         4,220,416 1001.bak
2014/10/08  07:02     1,418,283,008 1008.bak
               2 File(s)  1,422,503,424 bytes

     Total Files Listed:
               5 File(s)  2,880,045,056 bytes
               0 Dir(s)  35,598,852,096 bytes free

" dir / a-d / od / s / b>的Result.txt"

的Result.txt:

c:\test\1002.bak
c:\test\1009.bak
c:\test\result.txt
c:\test\subfolder\1001.bak
c:\test\subfolder\1008.bak

是否可以按日期对包括所有子文件夹的所有文件进行排序,然后在此文件夹磁盘大小达到限制时删除旧文件?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

@echo off
    set "targetFolder=%cd%"

    for /f "skip=4 tokens=2,*" %%a in ('
        robocopy "%targetFolder%" "%targetFolder%" /l /nocopy /is /s /njh /njs /ndl /nc /ns /ts 
        ^| sort /R
    ') do echo del "%%b"

此代码使用robocopy命令(来自Vista和更高版本的Windows中的本机,可供以前版本下载)而不是复制文件,但要获取时间戳为yyyy/mm/dd hh:nn:ss的文件列表格式。此列表按降序排序(sort /r),并跳过列表中的第一个(较新的)文件(skip=4)。对于列表中的其余元素,将执行del命令。

del操作仅响应控制台。如果输出正确,请删除echo命令