2012年9月19日水曜日

時刻とともに入力メッセージのログをとるbat

syntaxhighlighterとの戦いも終えたので投稿再開.
でもjavaじゃない(・ω・`)


とあるミッションで
「行動のログを時間つきでとっとけ」
ということがあったので, 早速そんなbatをつくってみた.


@ECHO OFF
For /F "eol=;tokens=1,2,3,4*delims=/, " %%i in ('date /t') DO SET YYYYMMDD=%%i%%j%%k
For /F "eol=;tokens=1,2,3*delims=:, " %%i in ('time /t') DO SET HHMM=%%i%%j
set YYYYMMDDHHMM=%YYYYMMDD%%HHMM%

echo 終了するときは"fin"と入力してください
setlocal enabledelayedexpansion
For /L %%o in (0,0,5) do (
 set /p INP="メッセージを入力してください>"
 if !INP!==fin (
  echo !INP!により終了!
  exit
 )
 set message=!date! !time! !INP!
 echo !message! >>record/%YYYYMMDDHHMM%.txt
)


正直2,3行目は参考サイト参照. ほぼコピペ('A`)
やってることは, ファイル名に日付 + 時刻を用いるための処理. これでうまく出てくれた.
6行目からが本体.
7行目はお決まりの宣言(らしい). これを宣言すると, 変数の値の上書きが出来るようになる(詳しい話があった気がする).
8行目からループ開始. /Lは前にも書いた単純ループ. 変数"o"が0から5の間0刻みで進む(=進まない)
9行目でメッセージを入力待ち.

10行目の"!INP!"が肝. 通常"%INP%"で読み込むところを"!"でくくることで, "INP"の内容をループの間上書きして読み込んでくれる. ここで"fin"と書き込まれたらif内へ. "exit"で終了する.

12,13行目はメッセージの設定. 書き込まれた内容に日付と時刻を足してファイルに出力している.


これを繰り返した出力結果の例


2012/09/19 19:14:15.33 test
2012/09/19 19:14:18.13 (・ω・`)
2012/09/19 19:14:34.85 20120919


入力がコマンドプロンプトでちょっと使いにくいのが難点(´-`). でもミッションでは有効だったから満足.



参考サイト:http://d.hatena.ne.jp/orangeclover/20101203/1291387934

javaなんて無かった.
((( ⊂⌒~⊃。Д。)⊃

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...