
現在、変更を書き込むたびにスイッチ/ルーターの構成を自動的にバックアップしています... これは、FTP 経由でテキスト ファイルをフォルダーに送信することによって行われます。
15 日以上経過したディレクトリ内のすべてのファイルを削除するスクリプトを作成しようとしています。ただし、15 日以上経過したファイルであっても、各デバイスの最新のファイルは保持したいと考えています。
ファイル名の形式は次のとおりです: 最新のファイル名は Hostname-Config-Change.txt ですが、新しい変更によって上書きされると、次のように名前が変更されます: Hostname-Config-Change_MM-DD-YY_HH-MM-SS_Time.txt
これを実現する最も簡単な方法は、名前に日付と時刻が含まれる 15 日以上前のファイルをすべて削除することだと思います。この方法にどう取り組めばよいのか全くわかりません。どちらかを実行する方法は見つかりましたが、両方を実行する方法は見つかりませんでした。
ご協力いただける場合は事前に感謝いたします。
これがこれまでの私のコードです。今は PowerShell を使用しているので、アドバイスをいただければ幸いです。
#Set Variables
# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)
#Set path of Files to be scanned & deleted
$path = "Directory to Files"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
#End of Script
答え1
これからフォローするすべての人が簡単に使えるようにするためです。上記の回答を参考にして、正規表現を使用して、ファイル名に日付が含まれ、その日付が X 日以上前のファイルを検索する方法を見つけることができました。最新のファイルにはファイル名に日付が含まれていないため、私の場合はうまくいきました。日付の構文に応じて正規表現を調整する必要があることに注意してください。
#Set Variables
# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)
#Set path of Files to be scanned & deleted
$path = "D:\BACKUPS\ConfigChange"
# Delete files older than the $limit and matching the dates in the file name.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.BaseName -match '(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})' -and $_.CreationTime -lt $limit } | Remove-Item -Force
#End of Script