LoginSignup
0
0

特定の期間を超えたファイルの削除

Posted at

日次で作成するバックアップなど、一定期間を超過したら削除するファイルの管理で利用します。
タスクスケジューラーで実行可能です。

####################################################################
## 本番環境に合わせて設定する項目

# 削除対象フォルダ
$dir ="対象のフォルダパス(フルパス)を記載";

# 削除対象 拡張子フィルター  特にない場合は*.*を設定
$ext ="*.*";

# ログファイル(フルパス)を指定
$LogFile  ="保存先フォルダを記載\"+ (Get-Date -Format "yyyyMMdd")+".log"

####################################################################


$TargetDate = Get-Date
$TargetDate = $TargetDate.AddYears(-1); # 1年以上前のファイルを削除する場合
$TargetDate = $TargetDate.AddMonths(-1); # 1ヶ月以上前のファイルを削除する場合

echo "実行ログ"  >$LogFile
echo "---------------------------------------------------" >>$LogFile
echo "削除対象のファイル"                                            >>$LogFile
$tmp= "更新日時<" + $TargetDate.ToString("yyyy/MM/dd HH:mm:ss")
echo $tmp  >>$LogFile
echo "削除対象のフォルダ"                                            >>$LogFile
echo $dir                                                            >>$LogFile
echo "---------------------------------------------------"           >>$LogFile

#対象フォルダだけ削除対象の場合
$list = Get-ChildItem $dir -File -Filter $ext ;

#配下フォルダも削除対象の場合
# Depthは、階層の深さ。以下例だと3階層下までファイルをチェックしてくれる。
#$list = Get-ChildItem $dir -File -Filter $ext -Recurse -Depth 3;  

$cnt  = [int]0;
foreach($fileAt in $list)
{
	$tmp = $fileAt.LastWriteTime.ToString("yyyyMMdd_HHmmss")+" "+$fileAt.Name
	if( $TargetDate.CompareTo($fileAt.LastWriteTime) -gt 0)
	{
		"【削除】"+$tmp >>$LogFile
		Remove-Item $fileAt.FullName -Force
		$cnt++;
	}
}

echo "---------------------------------------------------"           >>$LogFile
$tmp = "削除件数:"+$cnt.ToString();
echo $tmp >>$LogFile
echo "完了" >>$LogFile

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0