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

问题描述:

下面是一个例子:批处理文件:如果文件夹中有子文件夹,如何删除按日期排序的文件?

有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/AD/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/AD/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 

是否有可能包括日期,所有子文件夹中的所有文件进行排序,然后删除旧文件时​​,此文件夹的磁盘大小达到限制?感谢您的帮助。

@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命令

+0

@Binru,对不起,我认为我们从不同的角度看待它。我发布的代码尝试删除除“skip”子句中指示的较​​新文件数外的任何内容。这是你需要的还是你想要删除n个旧文件? – 2014-10-09 11:17:47

+0

嗨“MC ND”,非常感谢您的帮助和解决方案。我删除了跳过,它的工作完美如我所料。再次感谢! – Binru 2014-10-14 05:28:37