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

我需要确定根文件夹下每个子目录中最新的文件,并将该列表输出到显示文件名和创builddate的文本文件中。 例如,如果根目录是D:\ Data,其中包含4个子目录,其中4个子目录包含子目录,则我的输出文件应该包含仅有的文件列表(不包括创build的文件夹),如下所示:

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

我已经检查了其他post,但似乎没有做这个具体…

Solutions Collecting From Web of "生成Windows批处理中每个子目录中最新文件的列表"

两个选项

@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 /od /ad /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 /ad /b /s /od "%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作为完整文件列表加载到内存中。

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