Если вам нужно простое объяснение того, что я хочу сказать, а не полный контекст, просто прочтите то, что выделено жирным шрифтом.
Я работаю над проектом, который копирует старый сервер telnet, работающий на пакетном коде. Мне нужно создатьВОЗcommand, команда, которая выводит список недавних пользователей и как давно они ввели команду. Я настроил ее так, что каждый раз, когда пользователь запускает «команду», она выводит переменную в файл в папке, 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.