2017-03-13 32 views
1

ファイルがtest.dllでない限り、14日以上経過したファイルを削除するスクリプトがあります。特定のファイル以外の古いファイルを削除します。ディレクトリが削除されています

問題は、フォルダが14日以上経過してもファイルが若い、たとえば2日前にフォルダとファイルが削除されている場合です。ファイルが存在する場合、フォルダが削除されないようにこれを修正するにはどうすればよいですか?

ファイルはツリー内の任意のサブディレクトリに置くことができます。基本的には、test.dllを除いて、14日以上経過したすべてのファイルとフォルダをサブディレクトリ構造に保存することをお勧めします。ここで

は私が使っていたスクリプトです:

$Now = Get-Date 
$Days = "14" 
$TargetFolder = "E:\Web2\testdir" 
$Extension = "*.*" 
$LastWrite = $Now.AddDays(-$Days) 

#---- get files based on lastwrite filter and specified folder ----! 
$Files = Get-ChildItem $TargetFolder -Exclude "test.dll" -Recurse | 
     Where {$_.LastWriteTime -le "$LastWrite"} 

#---- For each file in $TargetFolder folder, run a foreach loop and delete the file 
if ($Files) { 
    foreach ($File in $Files) { 
     if ($File -ne $null) { 
      Write-Host "Deleting File $File" -ForegroundColor "DarkRed" 
      Remove-Item $File.FullName -Recurse -Force -ErrorAction SilentlyContinue | Out-Null 
     } else { 
      Write-Host "No more files to delete!" -ForegroundColor "Green" 
     } 
    } 
} else { 
    Write-Host "There are no files older than $Days days old in $TargetFolder" -ForegroundColor "Green" 
} 
+0

[OK]を - 私は_ $ -not追加PSIsContainer。この行に$ Files = Get-ChildItem $ TargetFolder -Exclude "upd.info.raf" -Recurse |どこでも{(-not $ _。PSIsContainer) - と($ _。LastWriteTime -le "$ LastWrite")} – sasquach007

+0

これはうまくいきました。ファイルはサブディレクトリに保存されていましたが、古いファイルはすべて削除されました。唯一の問題は何千もの空のディレクトリが残っていることです。空のディレクトリも削除する方法はありますか? 14日間の基準を満たすものは? – sasquach007

答えて

3

あなたのファイルのリストを収集するときGet-ChildItem-Fileパラメータを渡す:

$Files = Get-ChildItem $TargetFolder -File -Exclude "test.dll" -Recurse 
+1

PowerShell v3より前は '... | '-File'パラメータの代わりにWhere-Object {-not $ _。PSIsContainer}'を使います。 –

+0

空のフォルダを削除するには、このコードを最後のスクリプトの下に追加しました。私はこれが一番クリーンな方法かどうかは分かりませんが、うまくいくようです。 – sasquach007

関連する問題