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



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

D: folder1 数据文件名02/12/14

D: folder2 数据文件名03/02/14

D: folder3 数据文件名03/15/14

D: folder4 folder01 数据文件名01/22/14

我检查了其他帖子,但似乎没有一个是专门这样做的…

两个选项

@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使用更少的命令,速度更快,但使用临时文件,需要更多的内存,因为完整的文件列表将被加载到内存中。

选择取决于你的文件夹结构有多深,你有多少文件,有多少内存,....只是测试。

相关内容

  • 没有找到相关文章

最新更新