【问题标题】:Get List Of All The File Modified Dates Of All Files In A Folder And All Subfolders获取文件夹和所有子文件夹中所有文件的所有文件修改日期列表
【发布时间】:2017-10-24 21:18:17
【问题描述】:

我需要为我几个月前所做的工作制定时间表,但我从未正确跟踪时间。 (当时我不知道有必要跟踪这些信息。)

我认为我可以使用的最有价值的信息将是此时间段内文件的最后修改或创建日期时间戳。应该有在我工作的大多数日子里创建和最后修改的文件,这不仅可以帮助我拼凑时间,还可以帮助我拼凑我的工作内容。

我希望某种批处理脚本可以递归地遍历目录和所有子目录并将文件名、创建日期和最后修改日期放在文本文件中。一旦我掌握了这些信息,我可能很容易在 Excel 中进行排序。

这是一台 Windows XP 计算机,但我认为 Windows 的确切版本并不重要。

基本上,它是How to get the Last Modified date of all files in a folder using Batch,但我需要修改它以使其也具有创建日期并在所有子目录中递归(因为涉及的目录数量非常多)。我对 Batch 的经验只有非常基本的水平。

非常感谢您的帮助!

【问题讨论】:

  • 我个人会使用Karen's Directory Printer
  • 谢谢!这非常适合我的需求。
  • 这一行可以完成这项工作,但必须针对区域设置日期/时间格式进行调整:for /F "tokens=1-5*" %%a in ('dir /A-D /T:C /S ^| findstr "\/"') do echo %%a %%b %%c %%d - %%~Tf - %%f

标签: file date batch-file directory last-modified


【解决方案1】:
@ECHO OFF
SETLOCAL
(
for /f "delims=" %%a in ('dir /b /a-d /s *') do (
 for /f "tokens=1,2delims= " %%w in ('dir /tw "%%a"^|findstr /v /b /c:" "') do (
  for /f "tokens=1,2delims= " %%c in ('dir /tc "%%a"^|findstr /v /b /c:" "') do echo %%c %%d,%%w %%x,%%a
  )
 )
)>u:\z.txt

GOTO :EOF

产生输出文件u:\z.txt

执行一个没有目录名但包含所有子目录的裸目录列表,依次将每个文件名分配给%%a

然后对%%a 中的名称运行两个标准dir 列表,第一个用于最后写入时间,第二个用于创建时间,第二个列表使用元变量%%w%%x在上下文中。

使用 findstr 过滤每个输出以查找不 (/v) 以常量字符串“单个空格”开头 (/b) 的行 - 排除除 @987654331 中文件报告之外的所有行@。

然后使用空格作为分隔符,只删除前 2 个标记。

请注意,整个 for 语句周围的括号允许将整个输出重定向到新文件(替换任何现有文件 - 将 > 更改为 >> 以附加到现有文件(或创建一个如果没有现有文件))

管道前的插入符号转义管道,以便cmd 将其解释为要执行的命令的一部分(单引号),而不是for 的一部分。

【讨论】:

  • 我们如何扩展这个解决方案,以便我们能够将目录名称传递给它(而不是必须从目录中运行批处理文件)。
  • * 替换为"%~1\*"。如果您在 path 变量中的任何目录中都有此批处理,那么您可以从任何地方运行批处理,如果批处理没有参数,则默认为(当前目录)。频繁的批处理程序将目录添加到 path 用于批处理例程 - 通常称为 batch 或可能称为 belfry
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2015-05-16
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多