查找在日期,批处理脚本之间创建/访问/修改的文件

时间:2012-04-25 11:29:28

标签: windows command-line batch-file timestamp

我需要生成在Windows系统上分别创建,修改和访问的所有文件的列表。

我在http://technet.microsoft.com/sv-se/library/cc753551(v=ws.10).aspx找到了forfiles命令,但显然这并没有使用创建和访问的时间戳,我也需要这些(在单独的列表中)。

我也研究过使用dir命令,但我只找到了对帮助部分中的排序和过滤的引用。

2 个答案:

答案 0 :(得分:5)

你的问题有一些不清楚的细节,所以我做了一些假设。

下面的批处理文件创建了三个独立的文本文件:created.txt,modified.txt和accessible.txt,以及当前文件夹中的文件列表;每个列表都有YYYYMMDDHHMMSS格式的相应日期,后跟文件名,因此可以很容易地处理。

@echo off
setlocal DisableDelayedExpansion
for %%f in (created modified accessed) do if exist %%f.txt del %%f.txt
set "folder=%CD:~2%"
for /F "skip=1 tokens=1-3*" %%a in (
    '"wmic datafile where (path='%folder:\=\\%\\') get InstallDate, LastModified, 

LastAccessed, Name"'
                                   ) do (
   for /F "delims=." %%A in ("%%a") do echo %%A %%d>> created.txt
   for /F "delims=." %%B in ("%%b") do echo %%B %%d>> modified.txt
   for /F "delims=." %%C in ("%%c") do echo %%C %%d>> accessed.txt
)

rem Process each list this way:
for /F "tokens=1*" %%a in (created.txt) do echo %%a - %%b

答案 1 :(得分:0)

在主题中还有“日期之间”:)那怎么样?

forfiles不允许放置2个日期条件('+'和' - ')。

我也遇到了wmic不一致的日期条件问题。

例如:

wmic datafile where (path='%folder:\=\\\\%\\\\' and lastmodified ^> "20120713" and lastmodified ^< "20120714") get Name

什么都不返回(我在'&lt;'和'&gt;'之前需要一个转义('^')来运行命令。)

wmic datafile where (path='%folder:\=\\\\%\\\\' and lastmodified ^> "20120713") get Name

仅返回20120714000000之后修改的文件(以wmic表示法)。