获取文件夹和所有子文件夹中所有文件的所有文件修改日期列表

时间:2017-10-24 21:18:17

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

我需要做几个月前做的工作时间表,但我从来没有正确地追踪过几个小时。 (我当时不知道有必要跟踪这些信息。)

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

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

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

基本上,它是How to get the Last Modified date of all files in a folder using Batch但是我需要修改它以具有创建日期并通过所有子目录递归(因为涉及非常多的目录)。我对Batch有一个非常基本的经验。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

@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

然后在dir中的名称上运行两个标准%%a列表,第一个用于最后写入时间,第二个用于创建时间,第二个列表使用metavariables {{1和/ %%w在上下文中。

使用%%x过滤每个输出,以找到不具有(findstr)开始(/v)的行,其中包含常量字符串"单个空格" - 除了/b中文件的报告外,其他所有行都排除在外。

然后使用空格作为分隔符,敲出前两个令牌。

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

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