批处理文件:如果文件夹中有子文件夹,如何删除按日期排序的文件?
问题描述:
下面是一个例子:批处理文件:如果文件夹中有子文件夹,如何删除按日期排序的文件?
有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
命令
@Binru,对不起,我认为我们从不同的角度看待它。我发布的代码尝试删除除“skip”子句中指示的较新文件数外的任何内容。这是你需要的还是你想要删除n个旧文件? – 2014-10-09 11:17:47
嗨“MC ND”,非常感谢您的帮助和解决方案。我删除了跳过,它的工作完美如我所料。再次感谢! – Binru 2014-10-14 05:28:37