2016-06-01 13 views
0

x日より古いファイルを削除しようとしましたが、削除されているファイルを知りたいと思います。それは削除するファイル名をPowershellを使用して出力csvファイルにリダイレクトできませんでした

$limit = (Get-Date).AddDays(-365) 
$path = $args[0] 

# Delete files older than the $limit. 
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force | select Name,LastWriteTime | Export-CSV -NoTypeInformation -Path $args[1] 

仕事doesntの、PowerShellスクリプトの下に使用しています

は、ファイルが存在するパスとして最初の引数を渡しています。 2番目の引数は、ファイルを含むべき出力ファイルであり、削除されるものの日付変更された値です。

上記のコードは削除には問題ありませんが、削除されたファイル名と最後に変更された値はリダイレクトされません。

以下のコードを使用すると、ファイル名と最終変更値のみがリダイレクトされますが、ファイルは削除されません。

Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | select Name,LastWriteTime | Export-CSV -NoTypeInformation -Path $args[1] | Remove-Item -Force 

それを実行するためのコマンドの下に使用して -

./OlderFiles_Cleansing.ps1 'C:\Dev\PS' 'C:\dev\CleanedFiles_01062016.csv' 

私は何をしないのですか?

答えて

1

Export-CsvとRemove-Itemコマンドレットのいずれも、パイプライン内のコレクションを返さないため、パイプライン内のアイテムをさらに操作できなくなります。

$filesToDelete = Get-ChildItem -Path $path -Recurse -Force -Attributes !Directory | Where-Object CreationTime -lt $limit 
$filesToDelete | select Name,LastWriteTime | Export-CSV -NoTypeInformation -Path $args[1] 
$filesToDelete | Remove-Item -Force 

注私はアイテムがどこにパイプの一部を簡略化することができ はそうのparam属性と使用してファイルがあることを検出する方法を改善している: - あなたはしかし次の操作を行うことができます

は、コマンドを分割しました

+1

ありがとうございますHonzajscz! –

関連する問題