ログファイルを1ファイルずつ圧縮するPowerShellのサンプルを紹介します。
ローカルの開発環境で日別のログファイルが溜まってきたときに、1ファイルずつ圧縮をスクリプトで一括でやりたいときに便利です。
仕様
今回作成するスクリプトの仕様を説明します。
動作仕様
下記のようなフォルダで考えてみます。
日時別のlogファイルと、その他のファイルが雑多に混じっています。
フォルダ内のlogファイルのみ1つずつ圧縮されます。
ソースコード
ソースコードは下記のとおりです。
$currentPathはlogファイルが存在するパスです。
適当に変えてください。
ログファイル圧縮.ps1
$currentPath = "C:\temp\powershell\file\"
#作業フォルダ移動
Set-Location -Path $currentPath
#フォルダのファイル一覧取得
$items = Get-ChildItem * -File -include *.log
#ファイルごとにループ
foreach ($item in $items) {
#ログファイル名
$currentName = $item.Name
#圧縮ファイル名
$archiveName = $currentName.Substring(0, $currentName.LastIndexOf('.')) + ".zip"
#既存ファイル有無確認
if (Test-Path $archiveName) {
Write-Output "圧縮ファイルが既に存在します:" + $archiveName
}else{
#ファイル圧縮
Compress-Archive -Path $currentName -DestinationPath $archiveName -ErrorAction Stop
Write-Output "圧縮ファイルが既に存在します:" + $archiveName
#ログファイル削除
Remove-Item $currentName -ErrorAction Stop
}
}
Read-Host
実行手順
では実行してみましょう。
先ほどのスクリプトPowerShell Script Codeを、拡張子*.ps1として保存し実行します。
実行は右クリックメニュー「PowerShellで実行」で実行します。
実行前
実行前は日時別のlogファイルと、その他のファイルが雑多に混じって格納されています。
実行後
実行後はlogファイルのみが圧縮できているのが確認できました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント