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-ChildItem
retorna uma lista de todos os arquivos e pastas no arquivo atual pasta. -
Where-Object
nos permite filtrar essa lista, para obter apenas as pastas correspondentes o critério.$_
refere-se ao objeto atual para cada iteração.-
$_.IsPSContainer
retorna 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 propriedadeCount
funcione corretamente quando há apenas um item (consulte aqui para a explicação).
-
-
Por fim,
Remove-Item
exclui 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ê.