用於從充滿子資料夾的特定資料夾中刪除資料夾和子資料夾的腳本

用於從充滿子資料夾的特定資料夾中刪除資料夾和子資料夾的腳本

我有一個資料夾(用戶),裡面裝滿了我們用於用戶之間臨時傳輸的用戶資料夾。我希望能夠安排腳本來清空使用者資料夾的內容,而無需刪除使用者資料夾或變更權限。

有沒有辦法透過批次檔來做到這一點?我原本以為我可以使用類似的東西:

del /F \用戶**.*

但這沒有用。

請幫忙!

謝謝你!

答案1

您使用的是 Server 2012...您大約有 0 個理由使用批次。

在這裡,有一些 Powershell:

Foreach($_ In Get-ChildItem C:\Users -Recurse) 
{ 
    If(!$_.PSIsContainer) { Remove-Item $_.Fullname } 
}

這將刪除 C:\Users 目錄樹中及其下的所有文件,但將保持所有目錄完好無損。

編輯:

這個怎麼樣:

Foreach($_ In Get-ChildItem C:\Users)
{
    If($_.PSIsContainer)
    {
        Get-ChildItem $_.FullName -Recurse | Remove-Item
    }   
}

所以現在我們要做的就是取得 C:\Users 下的「一級」目錄列表,然後遞歸地清除每個資料夾的內容,所以最後只剩下 C :\Users及其下的第一級子目錄。

編輯:既然您提到您想更好地理解這一點,但又不熟悉 Powershell,我將更詳細地解釋上面的腳本。

Get-ChildItem C:\Users基本上就像C:\> dir C:\Users在 DOS 中一樣,但是 Powershell 以以下形式處理和傳回所有內容物體,不僅僅是簡單的控制台輸出。所以透過第一行閱讀

Foreach($_ In Get-ChildItem C:\Users)

這意味著我們將對 C:\Users 中存在的每個「物件」進行循環。既然我們是不是使用-Recurse此處的參數,Powershell將僅傳回C:\Users的一級目錄列表,而不會深入子目錄。

If($_.PSIsContainer)是一個 If 語句,表示「如果目前物件的「PSIsContainer」屬性設定為 True,這只是表達「如果這是一個目錄」的一種奇特方式,則進入此 if 迴圈。

因此,對於 下的每個子目錄C:\Users,我們將進入 If 迴圈。假設C:\Users它下面有三個子目錄:C:\Users\joeC:\Users\kateC:\Users\bill。這些子目錄下可能有任意數量的檔案和子目錄。

所以我們將進入 If 循環 3 次,所以每次都會看起來像這樣:

Get-ChildItem <C:\Users\joe> -Recurse | Remove-Item

Get-ChildItem <C:\Users\kate> -Recurse | Remove-Item

Get-ChildItem <C:\Users\bill> -Recurse | Remove-Item

該行的作用是取得該子目錄的內容,並-Recurse指定開關,以便它向下鑽取 、 和 的joe所有kate子目錄bill

然後,它需要所有這些子對象並且管道它們是Remove-Item,您可以將其視為Remove-Item的一個奇特別名del。它刪除了所有的東西。

合理?

相關內容