溜まった録画を自動削除

TV番組の録画をPCで行っている。週10番組ぐらいだろうか。当然、録画が溜まっていく。
そろそろHDDの空き容量も逼迫してきているので、古い録画ファイルを自動で削除することを考えてみた。

目的HDDに一定の空き容量を確保するため、古い録画ファイルを自動削除する
仕様HDDに確保する空き容量を、絶対容量(byte指定)、あるいは%で指定する
指定の空き容量が確保できるまで、一番古い録画ファイルを削除する
削除された録画ファイルのログを残す
古い録画を削除するプログラムは、Windowsのタスク機能でシステム起動時に自動実行される
使用言語作成者の学習のため、PowerShellとする

PowerShellのコード

$RecP = "N:\"
$TrgD = $RecP[ 0]
$Dt = ( ( Get-PSDrive $TrgD).Used + ( Get-PSDrive $TrgD).free) * 0.01
$Dt

$LogF = $MyInvocation.MyCommand.Source
$LogF = $LogF -replace ".ps1", ".log"
$DelL = ""

while( 1) {
  $Df = ( Get-PSDrive $TrgD).Free
  $Df
  if( $Dt -lt $Df) { break }

  $FN = ( Get-ChildItem $RecP | Sort-Object -Property LastWriteTime).FullName[ 0]
  $FN
  "delete:" + $FN
  Remove-Item $FN
  $DelL += $FN + "`r`n"
}

if( $DelL -ne "") {
  if( Test-Path $LogF) {
    $LogC = Get-Content $LogF
  } else {
    $LogC = ""
  }
  $DelL = ( Get-Date -Format "yyyy.MM.dd hh:mm:ss") + "`r`n" + $DelL
  Write-Output $DelL | Set-Content -Encoding Default $LogF
  if( $LogC -ne "") {
    Write-Output $LogC | Add-Content $LogF -Encoding Default
  }
}

プログラムは、

  • 空き容量をチェックしながらループを回して、指定された空き容量に達していなければ、指定されたフォルダ内の一番古いファイルを削除する
  • ファイルの削除が発生していたら、ログを出力する

の二つのブロックに分かれる。
所々、変数名だけの行は、Write-Output(標準出力のコマンド)を省略したから。
削除対象とするフォルダや、指定する空き容量は、プログラムへ渡す引数にしても良かったかもしれない。

これを、システム起動時のタスクに仕掛ける。

これで、起動時に自動で古い録画を削除できた。

コメントを残す

メールアドレスが公開されることはありません。