Si desea una explicación simple de lo que quiero en lugar del contexto completo, simplemente lea lo que está en negrita.
Estoy trabajando en un proyecto que replica un antiguo servidor telnet, ejecutándose con código por lotes. necesito crear elOMScomando, un comando que enumeraría los usuarios recientes y cuánto tiempo hace que emitieron un comando. Lo tengo configurado para que cada vez que un usuario ejecute un "comando", haga eco de una variable en un archivo en una carpeta llamada online
con el nombre de archivo establecido en su nombre de usuario. Ahora, para que el comando who funcione, necesito poder procesar cuánto tiempo hace que se emitió el comando. Dicho esto, realmente solo quiero que muestre a los usuarios que emitieron un comando en los últimos cinco minutos.
Básicamente lo que necesito es hacer lo siguiente:
1] Necesito poder eliminar archivos de un directorio que tengan más de cinco minutos.
2] Necesito poder saber cuánto tiempo hace un archivo.(específicamente esos archivos restantes)se modificó en un formato como: This file was modified 5 Minutes and 32 Seconds ago.
si el archivo solo se modificó hace 5 segundos, preferiblemente tendría el formato This file was modified 5 seconds ago
.Y el archivo que se creó hace menos de un segundo no puede bloquearlo. No me importa si dice created 0 seconds ago
pero no puede decir created (blank) seconds ago
.
Por cómo está configurado, lo hace.notiene que depender de la ubicación. Aquí hay un ejemplo de lo que %time%
están %date%
configurados en mi máquina:Sat 03/23/2019, 17:49:47.98
Originalmente lo había configurado para que hiciera eco de la fecha y la hora sin dos puntos ni barras en esos archivos, pero no ha sido confiable para los cálculos matemáticos.
¿Cómo haría para hacer esto?
esto es lo que tenía hasta ahora:
(extracto del guión completo)
@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.