コマンドについて詳しく解説します
以前、Windowsバッチで「現在の日付と時刻をファイル名に指定する方法」を指定する方法をTipstourに掲載しました。
【バッチ勉強】現在の日付と時刻をファイル名に指定する方法 | Tipstour
ここ最近になって、バッチよりもPowershellを使う頻度の方が高くなってきたのでPowershellの例文についても紹介していくように、できたらいいなと思っている次第です。
ということで、「現在の日付と時刻をファイル名に指定する方法」のPowershell版を紹介しておきます。
ソース
$filename = Get-Date -Format "yyyy-MMdd-HHmmss" Write-Output "test" | Out-File "log_$filename.txt"
処理の内容
18行ほどあったバッチの処理と比べると、Powershellでの処理はたった2行で収まっているので非常にスマート、効率的に記述できるようになってます。
日付を取得して変数へ代入
$filename = Get-Date -Format "yyyy-MMdd-HHmmss"
コマンドプロンプトでは長々とした記述が必要だった日付や時刻の取得も、Powershellではコマンドひとつで可能になってます。
Get-Date で現在の日付、時刻を取得します。 -Format は日付の取得フォーマットを指定できます。 僕は「2014-1211-153700」というようなフォーマットが好きなので、その形式で出力されるように指定してます。
$filename は変数で、ここに指定したフォーマットの文字列を格納しているというわけですね。
ファイル名に変数を含める
Write-Output "test" | Out-File "log_$filename.txt"
あとは代入した変数をファイル名に指定して、データを出力するのみです。 ここまで2行でいけます。
出力されたファイル
ということで、ファイルを出力するとこんな感じ。 バッチで出力したファイル名と完全に同じように出力できます。
まとめ
- Get-Dateで日付を取得
- -Format でフォーマットを指定
- 変数に取得した日付を入れて、ファイル名を指定
最近になってようやくPowershellを触り始めたんだけど、Windowsバッチと比べると格段にやりたいことをシンプルに、短い記述で実現できるようになってますね。 ある一定のバージョンのOS上であれば標準で動くようになってるみたいなので、サーバの運用で有効活用できそうです。
…ただ、Powershellにもバージョンがあって、出来るコマンド/出来ないコマンドがあるのがちょっと困りものというか、使いまわししたいときに面倒くさそうな気がするなあ。 そこだけ気になる。