Как я могу сравнить две даты в партии? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть пакетный скрипт для получения двух дат;одна из папки и текущая системная дата.

Я хочу специально сравнить два, посмотрев, является ли дата папки на 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?

Если кто-нибудь может мне помочьздесь, я действительно оценил бы это.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы МОЖЕТЕ делать математику даты в чистом пакете, но это довольно громоздко.
(См. Библиотека пакетных функций Ричи Лоуренса )

Рекомендуюиспользуйте PowerShell в качестве инструмента для этого

PowerShell one liner:

[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%
...