2016-12-15 46 views
1

所以我想用下面的「腳本」Powershell的刪除,項目留下的文件夾背後

Get-ChildItem 'F:\View\Profiles\' -Recurse -Force | 
    Where-Object {$_.Directory -match 'F:\\View\\Profiles\\((\w*).V2)\\AppData\\Roaming\\Trillian\\users\\((\w*%\w*%\w*))\\logs\\(_CLOUD|ASTRA)'} | 
    Remove-Item -Recurse -Force 

這將刪除所有日誌文件,但留下的文件夾結構後面收拾我的一些用戶配置文件的每晚的基礎上。因此,我嘗試了下面的查詢。

Get-ChildItem 'C:\TestProfileClean' -Recurse -Force | 
    Where-Object {(($_.Name -eq "logs" -and $_.Directory) -and $_.DirectoryName -match 'C:\\TestProfileClean\\(\w*.V2)\\AppData\\Roaming\\Trillian\\Users\\((\w*)%40(\w*)%2Ecom)')} | 
    Remove-Item -Recurse -Force 

這確保刪除的文件夾被命名爲「日誌」,它是一個目錄,目錄名稱是這種格式。

C:\\TestProfileClean\\(\w*.V2)\\AppData\\Roaming\\Trillian\\Users\\((\w*)%40(\w*)%2Ecom) 

問題是,當我運行第二個命令,它不會刪除任何文件,如果我切斷$_.DirectoryName然後我得到以下輸出。

Directory: C:\TestProfileClean\username.V2\AppData\Roaming\Trillian\users\username%40compcorp%2Ecom 


Mode    LastWriteTime   Length Name 
----    -------------   ------ ---- 
d-----  12/14/2016 9:56 AM    logs 

這將刪除我想要的東西,但沒有足夠的特別讓我舒服地運行它。

什麼是做錯了,是阻止文件夾被刪除,但腳本將刪除所有非文件夾項目。

回答

1

您錯過了通配符以遍歷文件夾下的所有文件。我只是修改你的代碼:

Get-ChildItem 'F:\View\Profiles\*' -Recurse -Force | 
    Where-Object {$_.Directory -match 'F:\\View\\Profiles\\((\w*).V2)\\AppData\\Roaming\\Trillian\\users\\((\w*%\w*%\w*))\\logs\\(_CLOUD|ASTRA)'} | 
    Remove-Item -Recurse -Force 

注:我沒有檢查正則表達式。我只是調整了獲得子女名字的一部分。

除此之外,我還有其他2條建議。如果你真的要刪除的用戶配置文件每晚的基礎,那麼你就可以使用由製造PowerShell中的批量

2)的小工具,工具

1)。

以下是供您參考的鏈接。

Delprof - Batch

Delprof - Powershell

希望這有助於... !!!

+0

我很確定-Recurse的使用否定了這種需要,在任何情況下這樣做仍然只會刪除文件而不是文件夾。 目前,腳本仍然會將文件刪除儘可能多的文件夾,但仍然留下空的文件夾。 –

+0

有沒有重複?刪除項擁有簽名'保護覆蓋無效RemoveItem(字符串路徑,布爾遞歸)' –

+0

那麼,有170k文件和文件夾,我想清理。該文件得到清理,但文件夾沒有。每個配置文件中的每個文件夾都命名相同,但每個配置文件都有自己的路徑。 –

相關問題