【问题标题】:Batch File: How to delete files sort by date if there are subfolders in the folder?批处理文件:如果文件夹中有子文件夹,如何删除按日期排序的文件?
【发布时间】:2014-10-09 10:02:52
【问题描述】:

这是一个例子:

有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”

结果.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"

结果.txt:

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

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

【问题讨论】:

    标签: batch-file


    【解决方案1】:
    @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 个旧文件?
    • 嗨,“MC ND”,非常感谢您的帮助和解决方案。我删除了跳过,它正如我所期望的那样完美。再次感谢!
    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多