我目前正在使用此脚本在特定日期之后查找文件。
forfiles /P directory /S /D +%day%/%month%/%year%
问题是,我找不到让时间特定的方法。例如,我想在23/03/2017 17:30
(下午5:30)之后找到文件。
是否有批处理脚本允许我在某个date time
之前/之后查找文件?
如果可能,我不想使用forfiles
,因为其日期参数格式是特定于区域的。
答案 0 :(得分:1)
对于区域/区域设置无关的解决方案,请使用下一个PowerShell代码段:
$closeTime = Get-Date -Year 2017 -Month 3 -Day 18 -Hour 17 -Minute 30
Get-ChildItem D:\bat\so -File |
Where-Object { $_.LastWriteTime -ge $closeTime } |
ForEach-Object {
# do something with a file
'{0} {1}' -f $_.LastWriteTime, $_.FullName
}
修改:遗憾的是,我的第一次尝试是错误的,因为它会模拟下一个PowerShell代码段(在每天17:30
之后仅显示文件 < / em>在指定日期之后,17:30
):
Get-ChildItem D:\bat\so -File |
Where-Object { $_.LastWriteTime -ge $(Get-Date -Year 2017 -Month 3 -Day 18) } |
Where-Object {$_.LastWriteTime.Hour -ge 17 -and $_.LastWriteTime.Minute -ge 30} |
ForEach-Object {
# do something with a file
'{0} {1}' -f $_.LastWriteTime, $_.FullName
}
FORFILES.exe
没有提供这种可能性。但是,您可以使用IF
有条件地在每个文件上执行命令来检查时间,如下所示:
==> FORFILES /P SO /D +18/03/2017 /C "cmd /c if "@ftime" GEQ "17:30:00" (echo @fdate @ftime GEQ @path) else (echo @fdate @ftime LSS @path)"
20/03/2017 19:59:05 GEQ "d:\bat\SO\42911145.bat"
21/03/2017 08:52:49 LSS "d:\bat\SO\42918825.bat"
22/03/2017 13:44:52 LSS "d:\bat\SO\numberedFiles.bat"
==>
如果不需要,请忽略else
分支:
==> FORFILES /P SO /D +18/03/2017 /C "cmd /c if "@ftime" GEQ "17:30:00" echo @fdate @ftime GEQ @path"
20/03/2017 19:59:05 GEQ "d:\bat\SO\42911145.bat"
==>
阅读TIME
- Display or set the system time文章,了解有关区域特定时间格式的更多信息。