PowerShellのコマンドはどうにもすぐ忘れるので、自分でも記事を書いてみることにした
パワーシェルでファイルのタイムスタンプをcsvファイルへと出力できないか思案し、なんとか形になったので結果をまとめる
##動作環境
- Windows10
- PowerShell 5.1
##PowerShellソースコード
今回のファイルの命名規則はアルファベットとしてみた
Exportcsv.ps1
$csv="timestamp.csv"
$extension="xyz"
#該当ファイル名もしくは該当ファイルの命名規則を配列に入れる
$filenameArray=@("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x")
$exportcsvArrary=@()
#ファイルの個数分繰り返す
foreach($i in $filenameArray){
if(Test-Path .\*$i.$extension){
$filename=$(Get-ItemProperty .\*$i.$extension).Name #(フォルダ内のアイテム)ファイル名を取得
$timestamp=$(Get-ItemProperty .\*$i.$extension).LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')
#変数に格納
$storecsv=New-Object PSObject | Select-Object Information1,Information2
$storecsv.Information1=$fileName #1列目の(Information1の下の)2行目にファイル名を出力
$storecsv.Information2=$timestamp #2列目の(Information2の下の)2行目にファイル名を出力
$exportcsvArrary+=$storecsv
}
}
#ホスト(コンソール)画面に結果を表示
$exportcsvArrary | ft -AutoSize
#-Encoding DefaultでシフトJIS出力
$exportcsvArrary| Export-Csv -NoTypeInformation .\$csv -Encoding Default
#csvを起動し終了を待つ
Write-Host プロセスの終了を待機中
Start-Process .\$csv -wait
[GC]::Collect()
※最初はループ処理をfor文にしていたが、foreach文の方が配列と相性が良さそうなのでそちらにした
ファイル名がa~xとなっている場合のホスト画面
Information1 Information2
------------ ------------
a.xyz yyyy/MM/dd HH:mm:ss
...(略)...
x.xyz yyyy/MM/dd HH:mm:ss
プロセスの終了を待機中
timestamp.csvが生成される
##参考
特に以下のサイトは大変参考になった
カスタムオブジェクトの作り方などは参考にしたというよりも倣いました
##最後に
上記では必要ないかもしれないが調べているうちに
[GC]::Collect()
というコマンドが出てきた
.NET Frameworkの機能でガベージコレクションを強制実行するものらしいが、
筆者はここらへん全く理解できてないので今後理解を深めていきたい
- 前回の記事 | 次回の記事