两种选择
@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 作为完整文件列表将加载到内存中。
选择取决于您的文件夹结构有多深,您有多少文件,多少内存,....只是测试。