以下是一个例子:
共有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
是否可以按日期对包括所有子文件夹的所有文件进行排序,然后在此文件夹磁盘大小达到限制时删除旧文件?谢谢你的帮助。
答案 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
命令