2014-11-06 124 views
1

我有以下腳本,我寫了一個非常大的目錄中有很多子目錄的遠程所有空文件夾。當我在測試環境中使用它時,又名C:\ Test包含空的文件夾,其中一些只有文件,一些只包含文件夾,一些包含文件和文件夾,在那裏它可以很好地工作。但是,當我在大目錄上使用它時,它仍然問我是否要刪除一些帶有子項目的文件夾。我希望它刪除空文件夾並忽略包含子項目的文件夾。我在這裏做錯了什麼想法?使用Powershell刪除空文件夾

function removeEmptyItems($inst) 
{ 
    $testInst = (($inst.FullName) + '\' + "*") 
     if(($inst.PSIsContainer) -eq $true) 
      { 
       if((Get-Item -Path ($testInst) -ErrorAction SilentlyContinue -Force) -eq $null) 
        { 
         Remove-Item -LiteralPath ($inst.FullName) -Force 
        } 
      } 
} 

# Change The Value For Set-Location To Wherever You Want To Trim 
Set-Location "\\server\folder\subfolder" 
Get-ChildItem -ErrorAction SilentlyContinue -Recurse | 
%{ foreach ($inst in $_) { removeEmptyItems ($inst) } } 

謝謝你的任何幫助我能,

附:如果你不想幫助並且覺得自己喜歡低調投票,不要評論並告訴我爲什麼你這樣想,這樣我就可以變得更好,我的問題可以得到解決。謝謝。

回答

0

在這裏,這將清除出空目錄,沒有確認:

gci $Path -force -recurse| 
    Where{$_.psiscontainer -and (gci $_.FullName -force -recurse|?{!$_.psiscontainer}).count -eq 0}| 
     Remove-Item -Recurse -force 

這看起來只有文件夾,然後檢查每一個,看它是否有它裏面的文件,如果它在0文件它遞歸地刪除文件夾及其中的任何子文件夾。

+0

我試了一下,但如果跑了幾分鐘,沒有找到任何東西。我嘗試換掉Select-Full的Remove-Item live,但是沒有找到任何東西。看看代碼它看起來應該工作,但它找不到任何東西。我確實手動查看並確認有空的子目錄。 – CalebB 2014-11-06 21:53:12

+0

此方法應刪除_any_子目錄中沒有文件的文件夾。您希望刪除的文件夾是否在其任何子目錄中都有_any_文件? – Matt 2014-11-06 22:02:45

+0

@Matt是的主目錄有很多包含文件的子目錄。主目錄有超過200,000個子項目。我檢查了一下,以確保沒有任何文件路徑超過了260個.NET文件路徑名的限制,並且它全部設置在我正在運行的位置。我只是希望它通過主目錄的子項並刪除任何地方的空文件夾在樹上。 – CalebB 2014-11-07 14:28:22