2016-06-28 41 views
1

我有一個PowerShell腳本,通過一個目錄,並刪除超過18個月的文件。大多數的文件遵循以下命名約定:刪除PowerShell腳本中的某些文件

20140628

然而,一些文件沒有。我試圖讓腳本忽略這些文件,只是刪除遵循命名約定的文件。但是,出於某種原因,下面的腳本正在做與此相反的操作,並刪除不遵循命名約定的文件並將其保留。我將如何修改腳本以適應我的需求?任何幫助將不勝感激。

$targetdirectory = "\\DPR320-W12-1600\PRTG" 
$CleanupList = Get-ChildItem $targetdirectory\test 
$Threshold = (get-date).AddMonths(-18) 
$culture = [Globalization.CultureInfo]::InvariantCulture 

foreach ($DirName in $CleanupList) 
{ 
try { 
    [datetime]::ParseExact($DirName.BaseName, 'yyyyMMdd', $culture) 
    Remove-Item $DirName.FullName -Force -Recurse 
} 

catch { 

    continue 
} 

} 
+0

「清理」過程在哪裏? – gravity

回答

0
$targetDirectory = "\\DPR320-W12-1600\PRTG" 
$cleanupList = Get-ChildItem $(Join-Path $targetdirectory "test") 
$threshold = (Get-Date).AddMonths(-18) 
$culture = [Globalization.CultureInfo]::InvariantCulture 

foreach ($dirName in $cleanupList) { 
    try { 
     $dateFromName = [datetime]::ParseExact($dirName.BaseName, "yyyyMMdd", $culture) 

     if($dateFromName -le $threshold) { 
      Remove-Item $dirName.FullName -Force -Recurse 
     } 
    } catch { 
     Continue 
    } 
} 

如果解析爲日期失敗,錯誤就會被拋出和文件不會被刪除。

我甚至不確定Continue是需要在這裏,但你不能刪除catch塊。

+0

謝謝!請看我編輯的腳本。我首先發布了不正確的一個。它現在有刪除線。但是,它會刪除所有帶日期的文件。我如何才能刪除超過18個月的文件? –

+0

應該使用什麼日期進行比較?從名字解析的那個?文件修改?文件創建? – sodawillow

+0

是的。它應該獲取文件/目錄名稱,並將其與腳本頂部的一個變量中設置的今天日期進行比較。 –