Я прошу помощи
Необходимо сравнить дату и время модификации папки и если папка не менялась более 4 часов то эхо 1
если модифицировалось то 0
Я узнал дату и время изменения
FOR %A IN ("C:\Program Files") DO @ECHO=%~tA
Когда дело доходит до дат и cmd
, есть много способов, обычно прибегают к использованию какой-либо внешней команды, такой как powershell, vbs и пары других методов.
В этом случае я бы предложил прибегнуть к powershell
, чтобы облегчить вам жизнь.
Есть несколько способов сделать это в PS, но лично использование времени эпохи значительно упрощает вычисления. Со временем эпохи мы имеем дело с секундами и можем выполнять простые математические вычисления, т. е. 14400 секунд = 4 часа.
$now = [datetimeoffset]::UtcNow.ToUnixTimeSeconds()
$file = [datetimeoffset]::new((Get-Item "C:\Program Files\").LastWriteTimeUtc).ToUnixTimeSeconds()
if ($now - $file -gt 14400) {
Write-Output "Older than 4 hours"
} else {
Write-Output "Modified within last 4 hours"
}
Вы можете редактировать вывод по своему усмотрению.
Если вы действительно хотите использовать это в пакетном файле, вы можете просто включить эту функцию. К сожалению, вы не предоставили достаточно контекста, чтобы дать вам полное решение.
Добрый день, спасибо за помощь
Командный процессор Windows
cmd.exe
, обрабатывающий пакетный файл, — единственный интерпретатор сценариев, установленный по умолчанию в Windows, который не имеет встроенной поддержки вычислений разницы во времени. Использование сценария PowerShell для этой задачи было бы намного лучше. Однако посмотрите ответы на Узнайте, существует ли файл старше 4 часов в пакетном файле, если вы действительно хотите закодировать это в пакетном файле без помощи других интерпретаторов сценариев, таких как PowerShell или Windows Script Host.