Simples o suficiente com o PowerShell:
cd C:\Parent
Get-ChildItem | Where-Object { $_.IsPSContainer -and @(Get-ChildItem $_).Count -eq 1 } | Remove-Item -Recurse
Explicação :
-
A segunda linha consiste em vários comandos, cada um dos quais tem sua saída enviada para o próximo usando o caractere
|(pipe). -
Get-ChildItemretorna uma lista de todos os arquivos e pastas no arquivo atual pasta. -
Where-Objectnos permite filtrar essa lista, para obter apenas as pastas correspondentes o critério.$_refere-se ao objeto atual para cada iteração.-
$_.IsPSContainerretorna true apenas para pastas, portanto isso nos permite excluir todos os arquivos no diretório pai. -
@(Get-ChildItem $_).Count -eq 1é verdadeiro apenas para pastas que tenham exatamente 1 arquivo ou subpasta dentro delas. O sinal@é necessário para que a propriedadeCountfuncione corretamente quando há apenas um item (consulte aqui para a explicação).
-
-
Por fim,
Remove-Itemexclui cada pasta que passou pelo filtro . O parâmetro-Recurseé necessário para excluir automaticamente pastas não vazias; sem isso, o PowerShell sempre perguntaria a você.