2012-05-07 23 views
2

在我們的服務器上,我們有類似以下文件:PowerShell的模式匹配的正則表達式

C:\Documents and Settings\username\Application Data\Sun\Java\jre1.6.0_01\ 
C:\Documents and Settings\username\Application Data\Sun\Java\jre1.6.0_02\ 
C:\Documents and Settings\username\Application Data\Sun\Java\jre1.6.0_03\ 
etc 

我們不需要這些文件的任何更多,所以我想寫一個PowerShell腳本刪除它們。現在我自己限制於一個特定的服務器,我有以下腳本:

$path = "\\server\c$\Documents and Settings\" 
Get-ChildItem $path -Recurse | Where {$_.PSIsContainer -and ($_ -match '^jre1.6.0_')} | Remove-Item -Recurse -WhatIf 

的問題是,我使用的模式似乎並沒有被調用的比賽,我不知道我做錯了。我嘗試了幾種排列方式,但都沒有效果。那裏的任何正則表達式專家能夠闡明我可能做錯了什麼?

感謝 布拉德

回答

3

嘗試這樣的:

Get-ChildItem $path -Recurse -Force | .... 

-Force也查找隱藏或系統文件/文件夾。

「應用程序數據」文件夾是隱藏的!

+0

就是這樣!它不會進入隱藏文件夾。謝謝! – Brad

1

正則表達式是好的,我想你應該嘗試

$_.Name -match '^jre1.6.0_' 

並不僅僅是

$_ -match '^jre1.6.0_' 
+1

使用'$ _ -match ...'取決於對象的ToString()行爲。所以是的,我會在腳本中使用'$ _。Name -match ...'。 –

+0

這似乎也沒有工作。我已經讓腳本運行了10多分鐘,並且它沒有返回任何東西。我會繼續讓它運行直到完成,看看是否需要更多時間來緩存所有目錄。 – Brad

+0

它終於完成 - 沒有結果。 PS C:\ Documents and Settings \ user \ desktop>。\ cleanjava.ps1 PS C:\ Documents and Settings \ user \ desktop> – Brad