如果您想要簡單解釋我想要的內容而不是完整的上下文,請閱讀粗體部分。
我正在開發一個複製舊的 telnet 伺服器的項目,運行批次程式碼。我需要創建世界衛生組織命令,該命令將列出最近的用戶以及他們發出命令的時間。我將其設定為每次使用者執行“命令”時,它都會將變數回顯到名為的資料夾中的檔案中,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.