Windows Powershellを使用して日時で作成されるフォルダを圧縮するシェルを作成してみた
業務上で日時フォルダを圧縮したいとの要件が出たため作成した時のメモを残します。
今回条件が類似していたのでhagure_m様のサイトを参考に少し変更を加えPowershellを作成しております。
1. Powershellスクリプト仕様
2. スクリプト内容
3. Compress-Archiveについて
Powershellスクリプト仕様
日時で新規フォルダが作成されその中にバックアップが置かれる。
そのフォルダの最終更新日付が2週間以前のフォルダだったら、同一フォルダ名.zipを作成する。
その後元のフォルダは削除し、結果はログに残す。
#LOG Function
function LOG ($SIV, $MSG){
"{0}:{1}:{2}" -f (Get-Date),$SIV, $MSG | Out-File -Append -FilePath $LOGFILE -Encoding default
}#info
$PS = 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe'
$BKUPDIR = 'C:\Backup'
$LOGDIR = "C:\logs"
$LOGFILE = '$LOGDIR\Commpress_$Date.log'
$EXEC_DT = Get-Date
$BEF_DT = $EXEC_DT.AddDays(-15)
$Date = $EXEC_DT.ToString('yyyyMMdd')$Folder_List = Get-ChildItem -Path $BKUPDIR -Recurse -Directory |
Where-Object {$_.LastWriteTime -lt $M_DT -and $_.Attributes -ne "Compressed"}#Counts
$i = 0#処理分岐
LOG "INF" "Commpress Start"foreach($Folder in $Folder_List)
{
$Folder_FULL = $Folder.FullName
$Folder_NAME = [System.IO.Path]::GetFileNameWithoutExtension($Folder.Name)
$ZIP_NAME = $Folder_FULL+".zip"
LOG "INF" "Tagert Folder-$Folder_FULL / zip-$ZIP_NAME"
if($Folder.PSContainer)
{
try{
Compress-Archive -Path $Folder_FULL -DestinationPath $ZIP_NAME
LOG "INF" "$($Folder.FullName) Commpressed"
Remove-Item -Path $Folder_FULL -Recurse -Force
LOG "INF" "$($Folder.FullName) removed"
$i++
}
catch {
LOG "ERR" "Error. $($Folder.FullName) Commpress Failed"
$ERRString = $error[0] |Out-String LOG "ERR" "$ERRString"
}
}
}LOG "INF" "Compressed END. FolderCounts:$($i)"
Compress-Archiveについて
Compress-ArchiveコマンドはPowershell5.0以上で利用できるコマンドです。
Windows2012の環境では利用できませんのでご注意ください。
詳しい情報については以下Microsoftのサイトをご確認ください。