2013-08-26 44 views
1

我是在PowerShell腳本是初學者所以保持冷靜^^如何exlude目錄

我想刪除目錄d文件:\測試我只刪除文件更15天 但I'don」要刪除目錄d:\ test中另一個目錄上的文件。

我的腳本

#----- define parameters -----# 
#----- get current date ----# 
$Now = Get-Date 
#----- define amount of days ----# 
$Days = "15" 
#----- define folder where files are located ----# 
$TargetFolder = "d:\test" 
#----- define extension ----# 
$Extension = "*.bak" 
#----- define LastWriteTime parameter based on $Days ---# 
$LastWrite = $Now.AddDays(-$Days) 
#----- get files based on lastwrite filter and specified folder ---# 
$Nomatch = "d:\test\ZZ - Archives","d:\test\ZZ - Cloture Paye" 

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"} | 
Where-Object {$_.FullName -notmatch "$Nomatch"} 

foreach ($File in $Files) 
     { 
     if ($File -ne $NULL) 
      { 
      write-host "Deleting File $File" -ForegroundColor "DarkRed" 
      Remove-Item $File.FullName | out-null 
      } 
     else 
      { 
      Write-Host "No more files to delete!" -foregroundcolor "Green" 
      } 
     } 

回答

1

有每個文件的屬性

PSIsContainer 

這表明,如果你的對象是一個目錄,您可以篩選文件的集合:

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | 
where { !$_.PSIsContainer } | ... 
+0

我可以用psiscontainer排除目錄嗎?用哪一行代碼? – Stranger

+0

好吧,我找到一個關於我的情況的解決方案^^ – Stranger

3

如果您使用Powershell 2.0,只能獲取文件:

Get-ChildItem $TargetFolder | Where-Object { ! $_.PSIsContainer } 

如果您在PowerShell的3.0,這樣做:

Get-ChildItem $TargetFolder -File 

我不知道,如果你想-Recurse。如果您只需要d:\test的文件,而不是子目錄下的文件,則不要使用-Recurse

+0

對不起,但它不是我的問題,我只是想排除我知道我可以使用PSIcontainer,但它可能有代碼行嗎? – Stranger

+0

@Stranger - 抱歉,我無法理解您的評論。有什麼代碼行? – manojlds

+0

關於排除我的具體目錄見下面$ Files = Get-Childitem $ TargetFolder -Include $ Extension -Recurse | 其中{!$ _。PSIsContainer} | ... – Stranger