pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


Windowsの言語設定によらず、バッチファイルで日付や時刻を常に同一の書式で取り扱う

Windowsコマンドプロンプトでは現在の日付や時刻が %DATE%, %TIME% から常に取得できて便利です。しかしこの環境変数の書式はロケールの設定に依存するので、日本語環境で作成したバッチファイルが英語環境では想定通りに動かない、なんてことが起こり得ます。

これは非常に面倒くさいので、以下のような方法で日付や時刻を常に固定の書式で取得できるようにしてみました。

for /f "usebackq tokens=*" %%a in (`powershell -Command Get-Date -Format "yyyy/MM/dd"`) do @set datestring=%%a
for /f "usebackq tokens=*" %%a in (`powershell -Command Get-Date -Format "HH:mm:ss"`) do @set timestring=%%a

この処理は PowerShell で日付や時刻を出力し、それを環境変数 datestrimg や timestring に代入しています。書式を変えたい場合は -Format の中身をいじるだけです。


あるいは、AddMonths 等で日付時刻の計算処理をしつつ書式を固定したい場合はこんな感じで。

for /f "usebackq tokens=*" %%a in (`powershell -Command "(Get-Date).AddMonths(-1).ToString('yyyy/MM/dd')"`) do @set datestring=%%a