这是命令行的繁琐本机解决方案,但它有效:-)
for /d /r %F in (.) do @pushd "%F"&(for /f "eol= delims=" %S in ('2^>nul dir /tc /a-d *') do @for /f "tokens=1-4*" %A in ("%S") do @echo %A %B %C %~fE)&popd
在批处理文件中跨多行格式化时看起来更好。
@echo off
for /d /r %%F in (.) do (
pushd "%%F"
for /f "eol= delims=" %%S in ('2^>nul dir /tc /a-d *') do (
for /f "tokens=1-4*" %%A in ("%%S") do @echo %%A %%B %%C %%~fE
)
popd
)
您可能希望按时间倒序对列表进行排序,以便所有新文件都聚集在顶部。使用该DIR /ODN
选项在每个目录中按时间顺序进行排序是微不足道的。但是在所有目录中按时间顺序排序是相当棘手的。这需要解析时间戳信息并以允许 SORT 生成按时间顺序排列的方式重新格式化它。不幸的是,解析时间戳非常依赖于语言环境。
这是一个适用于 OP 语言环境设置的批处理解决方案。它首先按创建时间戳按时间顺序排序,然后按完整文件路径的字母顺序排序。
@echo off
setlocal
set "tempFile=%temp%\listCreateTime%random%.txt"
>"%tempFile%" (
for /d /r %%F in (.) do (
pushd "%%F"
for /f "eol= delims=" %%S in ('2^>nul dir /tc /a-d *') do (
for /f "tokens=1-6* delims=/ " %%A in ("%%S") do (
if "%%D"=="12:00" (
echo %%C%%A%%B%%E00:00%%~fG*%%A/%%B/%%C %%D %%E %%~fG
) else (
echo %%C%%A%%B%%E%%D%%~fG*%%A/%%B/%%C %%D %%E %%~fG
)
)
)
popd
)
)
for /f "tokens=2 delims=*" %%A in ('sort /r "%tempFile%"') do echo %%A
del "%tempFile%"
也可以使用 WMIC 来获取和排序信息。它要简单得多,因为时间戳已经以允许 SORT 按时间顺序对其进行排序的方式进行格式化,因此无需解析。它也是独立于语言环境的——它应该可以在世界上任何支持 WMIC 的 Windows 机器上工作。但是这种方法速度较慢,而且输出也不那么容易阅读。当然,可以添加额外的编码来解析时间戳中的子字符串并重新格式化为更熟悉的形式。
@echo off
setlocal disableDelayedExpansion
set "tempFile=%temp%\listCreateTime%random%.txt"
>"%tempFile%" (
for /d /r %%F in (.) do (
set "folder=%%~pnxF\"
set "drive=%%~dF"
setlocal enableDelayedExpansion
2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!'" get name, creationDate|findstr /brc:[0-9]
endlocal
)
)
sort /r "%tempFile%"
del "%tempFile%"
时间戳在 YYYYMMDDhhmmss.ddddddzzzz
- YYYY = 年
- MM = 月
- DD = 天
- hh = 24 小时格式的小时
- 毫米 = 分钟
- ss = 秒
- dddddd = 微秒
- zzzz = 时区信息,表示为与 GMT 相差的分钟数