gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:47:27 25 4
gpt4 key购买 nike

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

我用过

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
)

但是,您需要注意一些事项:

  • 文件按访问时间戳在目录 中排序。它按所有目录的访问时间戳排序。您的原始代码有同样的问题。要跨目录排序需要解析访问时间戳并将其转换为字符串,该字符串将在通过 SORT 排序时按时间顺序排序。类似于“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%"

关于用于显示文件名和上次访问时间的 Windows Shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com