Пакет: список последних файлов и даты их изменения
Если вам нужно простое объяснение того, что я хочу, вместо полного контекста, просто прочитайте, что выделено жирным шрифтом.
Я работаю над проектами, которые реплицируют старый сервер telnet, на котором выполняется пакетный код. Мне нужно создать команду who, которая будет отображать список недавних пользователей и то, как давно они дали команду. Я настроил его так, что каждый раз, когда пользователь запускает "команду", он выводит переменную в файл в папке с именем online
с именем файла, установленным на их имя пользователя. Теперь, чтобы команда who работала, мне нужно уметь обрабатывать, как давно была выполнена команда. При этом я действительно хочу, чтобы он показывал только пользователям, которые выполнили команду за последние пять минут.
В общем, мне нужно сделать следующее:
1] Мне нужно иметь возможность удалять файлы из каталога, который старше пяти минут.
2] Мне нужно иметь возможность узнать, как давно файл (в частности, оставшиеся файлы) был изменен в таком формате: This file was modified 5 Minutes and 32 Seconds ago.
если файл был изменен только 5 секунд назад, его желательно отформатировать This file was modified 5 seconds ago
, И файл, созданный в течение секунды назад, не может его вызвать. Мне все равно, если это говорит created 0 seconds ago
но не могу сказать created (blank) seconds ago
,
Из-за того, как он настроен, он не должен зависеть от локали. Вот пример того, что %time%
а также %date%
установлены на моей машине: Sat 03/23/2019, 17:49:47.98
Первоначально я установил его так, чтобы он отображал дату и время без двоеточий или косых черт в этих файлах, но он не был надежным для математических вычислений.
как бы я поступил так?
вот что у меня было до сих пор:
(выдержка из всего сценария)
@echo off
setlocal EnableDelayedExpansion
set TME=%time::=%
set TME=%TME: =%
Set Compare=%date:~7,2%%TME:.=%
echo.
echo Recent Users:
for /f "tokens=*" %%A in ('dir /b ..\Online') do (
for /f "usebackq" %%i in ("..\Online\%%A") do (
set /a Value=%Compare% - %%i
if !Value! LSS 90000 (
if !value! LEQ 99 (
echo %%A !Value! ms ago
) ELSE (
if !value! GTR 9999 (
echo %%A !Value:~0,-4! minutes !Value:~1,-2! seconds ago.
) ELSE (
echo %%A !Value:~0,-2! seconds ago.
)
)
)
)
)
endlocal
echo.