Windows Shell命令显示文件名和上次访问时间

我正在尝试写一个Windows命令来列出文件及其上次访问时间,按访问时间sorting。

我用过

dir [directory] /O:D /T:A /S /B > output.txt 

这将按照上次访问时间顺序输出目录和子目录中的文件; 但是我也需要它输出最后的访问时间。 这是如何完成的?

从一个批处理文件中:

 >output.txt ( for /f "delims=" %%F in ('dir /o:d /t:a /s /b "c:\myPath\*"') @echo %%~tF %%F ) 

但是,有一些事情需要注意:

  • 这些文件按目录中的访问时间戳排序。 它不会按所有目录中的访问时间戳进行排序。 你原来的代码有同样的问题。 要对accross目录进行排序,需要解析访问时间戳并将其转换为一个字符串,按SOR排序时按顺序排序。 像“yyyy-mm-dd hh24:mm”。 即使这样也不是特别好,因为你没有时间。 您可以使用WMIC DATAFILE列出具有最后访问时间戳的文件名。 但是为什么呢,考虑到…

  • 由Windows维护的最后访问时间戳不可靠 ! 有许多情况下,应用程序可以读取文件,但最后访问时间戳不会更新。 我曾经在某处看过一些参考资料,但是我不记得在哪里。

如果您仍然认为您想获取按上次访问时间戳排序的整个文件夹层次结构的文件列表,那么以下内容将起作用。 假设你想列出“c:\ test \”下的所有文件

 wmic datafile where "drive='c:' and path like '\\test\\%'" get name, lastaccessed | sort 

时间戳的格式为YYYYMMDDhhmmssddddddZZZZ ,其中

  • YYYY =年
  • MM =月
  • DD =日
  • hh =小时(24小时制)
  • mm =分钟
  • ss =秒
  • dddddd =微秒
  • ZZZZ =时区,表示为与GMT的分钟差(第一个字符是符号)

编辑

WMIC中的通配符搜索会导致可怕的性能。 这是一个迭代遍历根层次结构中所有文件夹的版本,针对每个特定文件夹运行WMIC(无通配符)。 它有不俗的表现。

 @echo off setlocal disableDelayedExpansion set "root=c:\test" set "output=output.txt" set "tempFile=%temp%\dir_ts_%random%.txt" ( for /d /r "%root%" %%F in (.) do ( set "folder=%%~pnxF\" set "drive=%%~dF" setlocal enableDelayedExpansion 2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!'" get name, lastaccessed|findstr /brc:[0-9] endlocal ) ) >"%tempFile% sort "%tempFile%" >"%output%" del "%tempFile%"