使用以下代码,我们可以列出两个日期之间的文件。 但我们还需要检查时间戳。即列出日期和日期之间的所有文件。时间。
wmic datafile where "drive='%drive%' and path='%folder:\=\\%' and creationdate>'%start%' and creationdate<'%end%'" get creationdate, name, size
答案 0 :(得分:0)
检查FileTimeFilterJS.bat 要在当前目录中的两个日期之间打印文件,请尝试使用:
call FileTimeFilterJS "." -beginDate "September 1, 2014 10:15 AM" -endDate "November 1, 2014 10:15 PM"
答案 1 :(得分:0)
在WMI查询中使用时间戳是一件痛苦的事。您必须以'YYYYMMDD'
格式指定日期,或以'YYYYMMDDhhmmss.ffffffSZZZ'
其中
YYYY
=完整的四位数年份MM
=两位数的月份DD
=每月两位数hh
= 24小时格式的两位数小时mm
=两位数分钟ss
=两位数秒.ffffff
=六位小数秒(微秒)SZZZ
=时区表示为与UTC时间的分钟偏移量
S
=时区标志,+
或-
ZZZ
=三位数分钟表达日期时,字符串长度必须正好为6个字符。例如,2015年1月15日表示为'20150115'
。
表达日期时,字符串必须长度为25个字符。
例如,2015年1月15日,东部标准时间下午3:14表示为'20150115151400.000000-300'
。
因此,您现有的查询不必更改。您只需确保%start%
和%end%
字符串格式正确的日期时间值。
答案 2 :(得分:0)
另一个更简单(也更快!)的方法就是这个:
编辑:我修改了以前的代码,因此它现在处理创建日期,而不是最后修改的日期。
@echo off
setlocal EnableDelayedExpansion
if "%~2" neq "" goto begin
echo Usage: %0 YYYYMMDDHHMMstart YYYYMMDDHHMMend
goto :EOF
:begin
for /F "skip=5 tokens=1-7* delims=/: " %%a in ('dir /A-D /T:C *.*') do (
if "%%h" equ "" goto break
set "hour=%%d"
if "%%f" equ "p.m." set /A "hour=(1%%d+12)%%100"
set "fileDate=%%c%%a%%b!hour!%%e"
if "!fileDate!" geq "%~1" if "!fileDate!" leq "%~2" echo %%a/%%b/%%c %%d:%%e %%f %%g %%h
)
:break
是的,我知道这种方法不包含秒并且它依赖于语言环境,但对于OP和一定数量的用户来说可能就足够了。可以通过将%%c%%a%%b
顺序中的简单更改修改为适当的(例如%%c%%b%%a
)以及"tokens=1-7*
部分中的小调整来修复区域设置问题。