15日以上前に特定のフォルダ内に作成されたファイルのみを削除したいと思います。 PowerShellを使ってこれをどうすればできますか?PowerShellを使用して15日以上経過したファイルを削除する
dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
15日以上前に特定のフォルダ内に作成されたファイルのみを削除したいと思います。 PowerShellを使ってこれをどうすればできますか?PowerShellを使用して15日以上経過したファイルを削除する
dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
はこれを試してみてください。 -WhatIf
スイッチは、実際にファイルを削除し、実際に(ファイルが削除されます)のファイルを削除せずに何が起こるか、にスイッチを削除することを教えてくれます:
$old = 15
$now = Get-Date
Get-ChildItem $path -Recurse |
Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item -WhatIf
私は最後の '-recurse'はあまりにも多く、いいえと信じていますか? dirのリストは再帰的ですが、アイテムの削除には子が含まれていてはいけません、そうですか? – Joost
うまくいっています – RayofCommand
あなたが作業しているディレクトリが2つのディレクトリの深さにある場合は、2番目の時間が必要です。 –
基本的に、あなたは、与えられたパスのファイルを反復処理、現在の時刻から見つかった各ファイルのCreationTime
を減算し、結果のDays
プロパティと比較:
もう一つの方法は、現在の日付から15日間減算することであり、のみ(確かに、この記事のタイトルにあるものである)ファイルを削除するが、ここでは最初の15日間よりも古いファイルをすべて削除しますいくつかのコードだだろう与えられた答え
$root = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)
Get-ChildItem $root -Recurse | ? {
-not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item
:その値に対してCreationTime
を比較後で残っているかもしれない空のディレクトリを再帰的に削除します。私のコードでは、-Force
オプションを使用して、隠しファイルと読み取り専用ファイルも削除します。また、OPはPowerShellの新機能であり、gci
、?
、%
などが分からないことがあるので、エイリアスを使用しないことにしました。
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
そして、あなたは、ファイル/フォルダが実際にそれらを削除する前に削除されるかを確認したい場合はもちろん、あなただけの両方の行の末尾にRemove-Item
コマンドレットの呼び出しに-WhatIf
スイッチを追加することができます。
ここに示すコードはPowerShell v2.0互換ですが、このコードとPowerShell v3.0の高速コードもhandy reusable functions on my blogと表示しています。
エイリアスを使用していただきありがとうございます。 PowerShellの初心者で、Google検索でこの投稿を見つけたユーザーにとって、私はあなたの答えを最高と考えています。 –
私は@ deadlydogの提案を試しましたが、-15か-35を指定していても、ファイルの作成日を数か月(または最近)に変更すると、ディレクトリの内容全体が削除されます。 – Michele
はうまくいきました、ありがとう! –
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force -Recurse
これは古いフォルダとその内容を削除します。
#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)
#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}
foreach ($File in $Files)
{
if ($File -ne $Null)
{
write-host "Deleting File $File" backgroundcolor "DarkRed"
Remove-item $File.Fullname | out-null
}
else
write-host "No more files to delete" -forgroundcolor "Green"
}
}
この回答に間違いがありますか?なぜdownvotes? – user3282276
正常に動作しますが、PowerShellの機能は使用しません。 – PseudoToad
また、 '$ Files'が空であれば* foreach *文を入力しないので、* else *文には到達しません。 foreachを* if *文に入れるべきです。 – Dieter
単に(PowerShellのV5)
Get-ChildItem "C:\temp" -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-15) | Remove-Item -Force
Esperento57のスクリプトが古いPowerShellのバージョンでは動作しません。この例ではありません:
Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt (Get-Date).AddDays(-15)) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue
あなたもディレクトリを削除する例を示しています。 – Esperento57
ディレクトリを除外する答えを更新しました。ありがとう。 – KERR
別の方法(15が自動的に[タイムスパン]に入力された取得):
ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose
は答えのほとんどはCREATIONTIMEを使用しかし、それはあなたがないかもしれないので、ファイルがコピーされた場合にリセットされますあなたが望む結果を得る。 LastWriteTimeは、Windowsエクスプローラの[日付変更]に相当します。 –