首页 > 解决方案 > 如何批量比较两个日期?

问题描述

我有一个批处理脚本来获取两个日期;文件夹之一和当前系统日期。

我想通过查看文件夹的日期是否比当前日期早 10 分钟或更短时间来专门比较两者。这实质上是检查用户是否在最多 10 分钟前修改了此文件夹。

这是我当前的代码(不完整,但基础):

@echo off
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%a/%%b/%%c)
for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)

setlocal enabledelayedexpansion
if exist "C:\$Recycle.Bin" (
    pushd "C:\$Recycle.Bin"
    for /F "delims=" %%a in ('dir /S /b S-1-*-1001 /AD') do (set "{recycle-bin-date}=%%a")
    for %%a in ("!{recycle-bin-date}!") do (
        Set "data=%%~ta"
    )
    popd
)

set date1=%mydate% %mytime%
set date2=!data!

echo Date 1 (Current): %date1%
echo Date 2 (Recycle): %date2%
pause

::We have the dates above, how do I achieve what I'm trying to do?

如果有人可以在这里帮助我,我将不胜感激。

标签: datebatch-filecommand-linecmd

解决方案


您可以在纯批处理中进行日期时间数学运算,但这很麻烦。
(参见Ritchie Lawrence 批处理函数库

我建议使用 PowerShell 作为工具

PowerShell 一班轮:

[int]([datetime]::Now - (gci 'c:\$Recycle.BIN\S-1-*1001' -Force).LastWriteTime).TotalMinutes

包裹成一批

@Echo off
For /f "usebackq" %%A in (`
  Powershell -NoP -C "[int]([datetime]::Now - (gci 'c:\$Recycle.BIN\S-1-*1001' -Force).LastWriteTime).TotalMinutes"
`) Do Set "AgeMinutes=%%A"
Echo Age in minutes %AgeMinutes%

推荐阅读