我有一個資料夾(用戶),裡面裝滿了我們用於用戶之間臨時傳輸的用戶資料夾。我希望能夠安排腳本來清空使用者資料夾的內容,而無需刪除使用者資料夾或變更權限。
有沒有辦法透過批次檔來做到這一點?我原本以為我可以使用類似的東西:
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\joe
、C:\Users\kate
和C:\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
。它刪除了所有的東西。
合理?