前回作成した業務タイマー&トラッカーを改良したので、早速紹介します。
前回の仕様詳細はこちら↓
変更点は以下。
- 作業開始時間と終了時間をコンソールに表示
- 各セッション終了時にログに出力
本記事では変更点のみ説明していますので、基本的な内容については上記の前記事を参考にしてください。
スクリプト
@echo off
setlocal enabledelayedexpansion
REM ログファイルの作成(日付を取得)
for /f "tokens=1-4 delims=/ " %%a in ('echo %date%') do (
set "day=%%a"
set "month=%%b"
set "year=%%c"
)
set "log_file=C:\ログを保存するフォルダのパス\TimerLog_!year!!month!!day!.txt"
REM 日付をログファイルに書き込み
echo Date: %year%%month%%day%>>%log_file%
REM セッション番号の初期化
set "session=1"
set "total_duration=0"
:session_start
REM ユーザーに時間(分)の入力を求める
set /p "waiting_time=Session !session!: How Long(min): "
REM 指定された分数を秒に変換
set /a "waiting_time_seconds=!waiting_time!*60"
REM セッション開始時の時間を取得
for /f "delims=" %%t in ('echo %time%') do set "session_start_time=%%t"
for /f "delims=" %%t in ('echo %time%') do echo Session !session! started at: %%t
REM タイムアウト計測
timeout /t %waiting_time_seconds% /nobreak
REM 終了時間の取得
for /f "delims=" %%t in ('echo %time%') do set "session_end_time=%%t"
for /f "delims=" %%t in ('echo %time%') do echo Session !session! ended at: %%t
REM ウィンドウの最小化
powershell -command "(New-Object -ComObject Shell.Application).MinimizeAll()"
REM 終了メッセージの表示
msg * "Session !session! has ended.
REM 作業内容の入力
set /p "task=what did you do?: "
REM セッションの情報をログに出力
echo Session!session! starts: !session_start_time! ends: !session_end_time! Duration: !waiting_time!-min Did: !task!>>%log_file%
REM セッション終了後に継続確認
set /p "continue_session=Session !session! end. Continue? (Y/N): "
if /i "%continue_session%"=="Y" (
REM セッション番号の繰り上げ
set /a "session+=1"
set /a "total_duration+=waiting_time"
goto :session_start
) else (
REM 合計時間をログファイルに書き込み
set /a "total_duration+=waiting_time"
echo Total: !total_duration!-min>>%log_file%
)
echo Completed. Log has been saved in %log_file%.
pause
変更点
作業開始時間と終了時間をコンソールに表示
REM セッション開始時の時間を取得
for /f "delims=" %%t in ('echo %time%') do set "session_start_time=%%t"
for /f "delims=" %%t in ('echo %time%') do echo Session !session! started at: %%t
REM 終了時間の取得
for /f "delims=" %%t in ('echo %time%') do set "session_end_time=%%t"
for /f "delims=" %%t in ('echo %time%') do echo Session !session! ended at: %%t
前回のスクリプトでは取得した開始時間と終了時間はログに出力するだけで、最後にログが保存されるまでこれまでの経過を確認することができませんでした。
そこで今回は、それぞれ2行目を追加することで、コンソール上にも表示するようにし、都度開始時間と終了時間を確認することができるようにしました。
各セッション終了時にログを出力
前回のスクリプトでは、ユーザーが終了を選択したときに、それまでに実施した全てのセッションの情報をまとめてログを作成していました。
しかし、このやり方だと、セッション途中でコンソールを閉じてしまうとログが出力されず、誤って閉じてしまった場合や、一旦終了したいときにそれまでのセッション情報が保存されないという不都合がありました。
そこで今回は、各セッションが終了したときに、そのセッションの情報をログに出力するように内容を変更しています。
この変更により、急遽コンソールを閉じた時でも、それまでのログは残る仕様になりました。
スクリプトとしては、継続判断用のif文の中で一括で処理していたログ出力の内容を、継続判断より前に実施するように変更しています。
最終的に出来上がるログの中身は前回と変わりません。
では。