Se você quiser uma explicação simples do que desejo, em vez do contexto completo, basta ler o que está em negrito.
Estou trabalhando em projetos que replicam um servidor telnet antigo, executando código em lote. Eu preciso criar oQuemcomando, um comando que listaria usuários recentes e há quanto tempo eles emitiram um comando. Eu o configurei para que toda vez que um usuário executar um "comando", ele ecoe uma variável em um arquivo em uma pasta chamada online
com o nome do arquivo definido como seu nome de usuário. Agora, para que o comando who funcione, preciso ser capaz de processar há quanto tempo o comando foi emitido. Dito isto, eu realmente só quero mostrar aos usuários que emitiram um comando nos últimos cinco minutos.
Então basicamente o que preciso fazer é o seguinte:
1] Preciso poder excluir arquivos de um diretório com mais de cinco minutos.
2] Preciso saber há quanto tempo um arquivo(especificamente os arquivos restantes)foi modificado em um formato como: This file was modified 5 Minutes and 32 Seconds ago.
se o arquivo foi modificado apenas 5 segundos atrás, ele seria preferencialmente formatado This file was modified 5 seconds ago
.E o arquivo criado há um segundo não pode travá-lo. Eu não me importo se diz created 0 seconds ago
, mas não pode dizer created (blank) seconds ago
.
Devido à forma como está configurado, isso acontecenãotem que ser dependente da localidade. Aqui está um exemplo do que %time%
e %date%
está configurado em minha máquina:Sat 03/23/2019, 17:49:47.98
Originalmente, eu o configurei para que ecoasse a data e a hora sem dois pontos ou barras nesses arquivos, mas não era confiável para cálculos matemáticos.
como eu faria isso?
aqui está o que eu tinha até agora:
(trecho de todo o roteiro)
@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.