▼Powershell
# 圧縮対象のフォルダパス
$sourceDir = "C:\path\to\your\files"
# 圧縮ファイルの出力先フォルダパス
$archiveDir = "C:\path\to\your\archives"
# 圧縮対象の更新日時(YYYYMM形式で指定)
$targetDate = "202008" # 例:2020年8月
# 圧縮処理
try {
# 圧縮対象のファイルを検索
$filesToArchive = Get-ChildItem -Path $sourceDir | Where-Object { $_.LastWriteTime.ToString("yyyyMM") -eq $targetDate -and $_.Extension -eq ".txt" }
if ($filesToArchive) {
foreach ($file in $filesToArchive) {
# 圧縮ファイル名を作成(YYYYMM形式)
$archiveName = "{0}\{1}.zip" -f $archiveDir, $file.LastWriteTime.ToString("yyyyMM")
# 同名ファイルが存在する場合は連番を付与
$counter = 1
while (Test-Path -Path $archiveName) {
$archiveName = "{0}\{1}_{2}.zip" -f $archiveDir, $file.LastWriteTime.ToString("yyyyMM"), $counter
$counter++
}
# 圧縮を実行
Compress-Archive -Path $file.FullName -DestinationPath $archiveName -CompressionLevel Optimal
# 圧縮が成功したら元のファイルを削除
if (Test-Path -Path $archiveName) {
Remove-Item -Path $file.FullName -Force
Write-Host "File '$file.FullName' archived to '$archiveName' and deleted."
} else {
Write-Error "Failed to archive '$file.FullName'."
}
}
} else {
Write-Host "No files found to archive for the specified date '$targetDate'."
}
} catch {
Write-Error "An error occurred: $_"
}
▼スクリプトの説明:
変数の定義:
$sourceDir: 圧縮対象のファイルがあるフォルダパスを指定します。
$archiveDir: 圧縮ファイルを保存するフォルダパスを指定します。
$targetDate: 圧縮対象ファイルの更新日時を YYYYMM 形式で指定します(例: "202008")。
ファイルの検索:
Get-ChildItem コマンドで指定したフォルダ内のすべてのファイルを取得します。
Where-Object コマンドで、更新日時が $targetDate と一致し、拡張子が ".txt" のファイルを絞り込みます。
圧縮処理:
絞り込まれたファイルごとに以下の処理を行います。
圧縮ファイル名を YYYYMM 形式で作成します。
同名ファイルが存在する場合は、連番を付与してファイル名が重複しないようにします。
Compress-Archive コマンドでファイルを圧縮します。
圧縮が成功したら、Remove-Item コマンドで元のファイルを削除します。
エラー処理:
try-catch ブロックでエラーを捕捉し、エラーメッセージを表示します。
スクリプトの実行方法:
スクリプトをテキストファイルに保存します(例: archive_files.ps1)。
PowerShell を管理者権限で実行します。
スクリプトを保存したパスに移動します。
.\archive_files.ps1 と入力してスクリプトを実行します。
注意点:
スクリプト実行前に、$sourceDir、$archiveDir、$targetDate の値を適切に設定してください。
圧縮対象のファイルが存在しない場合は、メッセージが表示されます。
圧縮処理中にエラーが発生した場合は、エラーメッセージが表示されます。
スクリプト実行後、元のファイルは削除されますので、ご注意ください。
[0回]