生成Windows批处理中每个子目录中最新文件的列表

时间:2014-06-10 14:04:20

标签: windows batch-file subdirectory datecreated

我需要确定根文件夹下每个子目录中的最新文件是什么,并将该列表输出到显示文件名和创建日期的文本文件。例如,如果根目录是D:\ Data,其中包含总共4个子目录,其中4个包含子目录,则我的输出文件应包含仅包含以下内容的文件列表(不包括创建的文件夹):

D:\ Data \ folder1 \ filename 02/12/14

D:\ Data \ folder2 \ filename 03/02/14

D:\ Data \ folder3 \ filename 03/15/14

D:\ Data \ folder4 \ folder01 \ filename 01/22/14

我已经检查了其他帖子,但似乎没有人这样做......

1 个答案:

答案 0 :(得分:1)

两个选项

@echo off
    setlocal enableextensions enabledelayedexpansion

    set "rootFolder=c:\somewhere"

:: option 1
    echo --------------------------------------------------------------------------------
    for /d /r "%rootFolder%" %%a in (.) do (
        set "first="
        for /f "delims=" %%b in ('dir /o-d /a-d /b "%%~fa\*" 2^>nul') do if not defined first (
            set "first=1"
            for %%c in ("%%~fa\%%b") do echo %%~tc %%~fc
        )
    )

:: option 2
    echo --------------------------------------------------------------------------------
    set "tempFile=%temp%\%~nx0.%random%.tmp"
    dir /a-d /b /s /o-d "%rootFolder%" 2>nul >"%tempFile%"

    set "oldFolder="
    for /f "usebackq delims=" %%a in ("%tempFile%") do if not "%%~dpa"=="!oldFolder!" (
        echo %%~ta %%~fa
        set "oldFolder=%%~dpa"
    )

    del /q "%tempFile%" >nul 2>nul

选项1将递归文件夹结构,对于每个文件夹结构,执行dir命令以按降序日期顺序检索文件夹中的文件列表。列表中的第一个是最近一个的。

选项2将仅使用一个dir命令以降序日期顺序检索文件的完整列表,并将检索到的信息保存在临时文件中。然后处理该文件。每次文件夹名称更改时,输出将成为文件夹中最新文件的第一行。

选项1将提前启动以回显信息,但是当使用多个命令时,它将需要更多时间来执行,但需要更少的内存,因为它每次只检索一个文件夹的文件列表。

选项2使用较少的命令并且速度更快,但使用临时文件并需要更多内存,因此选项1作为完整文件列表将加载到内存中。

根据您的文件夹结构的深度,您拥有的文件数量,内存量,....进行选择....只需测试。