How to recursively remove all empty folders in PowerShell?

前端 未结 13 2690
野趣味
野趣味 2020-12-08 02:23

I need to recursively remove all empty folders for a specific folder in PowerShell (checking folder and sub-folder at any level).

At the moment I am using this scrip

13条回答
  •  失恋的感觉
    2020-12-08 02:59

    I have adapted the script of RichardHowells. It doesn't delete the folder if there is a thumbs.db.

    ##############
    # Parameters #
    ##############
    param(
        $Chemin = "" ,  # Path to clean
        $log = ""       # Logs path
    )
    
    
    
    
    ###########
    # Process #
    ###########
    
    
    if (($Chemin -eq "") -or ($log-eq "") ){
    
        Write-Error 'Parametres non reseignes - utiliser la syntaxe : -Chemin "Argument"  -log "argument 2" ' -Verbose 
        Exit
    }
    
    
    
    #loging 
    $date = get-date -format g
    Write-Output "begining of cleaning folder : $chemin at $date" >> $log
    Write-Output "------------------------------------------------------------------------------------------------------------" >> $log
    
    
    <########################################################################
        define a script block that will remove empty folders under a root folder, 
        using tail-recursion to ensure that it only walks the folder tree once. 
        -Force is used to be able to process hidden files/folders as well.
    ########################################################################>
    $tailRecursion = {
        param(
            $Path
        )
        foreach ($childDirectory in Get-ChildItem -Force -LiteralPath $Path -Directory) {
            & $tailRecursion -Path $childDirectory.FullName
        }
        $currentChildren = Get-ChildItem -Force -LiteralPath $Path
        Write-Output $childDirectory.FullName
    
    
    
        <# Suppression des fichiers Thumbs.db #>
        Foreach ( $file in $currentchildren )
        {
            if ($file.name -notmatch "Thumbs.db"){break}
            if ($file.name -match "Thumbs.db"){
                Remove-item -force -LiteralPath $file.FullName}
    
        }
    
    
    
        $currentChildren = Get-ChildItem -Force -LiteralPath $Path
        $isEmpty = $currentChildren -eq $null
        if ($isEmpty) {
            $date = get-date -format g
            Write-Output "Removing empty folder at path '${Path}'.  $date" >> $log
            Remove-Item -Force -LiteralPath $Path
        }
    }
    
    # Invocation of the script block
    & $tailRecursion -Path $Chemin
    
    #loging 
    $date = get-date -format g
    Write-Output "End of cleaning folder : $chemin at $date" >> $log
    Write-Output "------------------------------------------------------------------------------------------------------------" >> $log
    

提交回复
热议问题