如何在特定日期时间之前或之后编写批处理脚本来查找文件?

时间:2017-03-23 09:00:21

标签: windows batch-file

我目前正在使用此脚本在特定日期之后查找文件。

forfiles /P directory /S /D +%day%/%month%/%year%

问题是,我找不到让时间特定的方法。例如,我想在23/03/2017 17:30(下午5:30)之后找到文件。

是否有批处理脚本允许我在某个date time之前/之后查找文件?

如果可能,我不想使用forfiles,因为其日期参数格式是特定于区域的。

1 个答案:

答案 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文章,了解有关区域特定时间格式的更多信息。