完全な文脈ではなく、私が言いたいことの簡単な説明が必要な場合は、太字の部分だけを読んでください。
私はバッチコードで動作する古いtelnetサーバーを複製するプロジェクトに取り組んでいます。誰がcommand は、最近のユーザーと、そのユーザーがコマンドを発行してからどのくらい経ったかを一覧表示するコマンドです。ユーザーが「コマンド」を実行するたびに、online
ユーザー名に設定されたファイル名を持つフォルダー内のファイルに変数がエコーされるように設定しました。次に、who コマンドを機能させるには、コマンドが発行されてからどのくらい経ったかを処理できるようにする必要があります。そうは言っても、実際に表示したいのは、過去 5 分間にコマンドを発行したユーザーだけです。
基本的に必要なのは、次の操作です。
1] 5 分以上経過したファイルをディレクトリから削除できるようにする必要があります。
2] ファイルがどれくらい前に作成されたかを知る必要がある(特に残りのファイル)次のような形式で変更されました:This file was modified 5 Minutes and 32 Seconds ago.
ファイルが 5 秒前に変更されただけの場合は、次のようにフォーマットされるのが望ましいですThis file was modified 5 seconds ago
。そして、1秒未満前に作成されたファイルはクラッシュできません。 と言っても構いませんが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.