Abra o PowerShell ISE e tente executar isso:
$targets = @()
$folders = dir "D:\Users\Forza\Music\" | Where {$_.mode -match "d"}
foreach ($folder in $folders) {
if(
($folder.GetFiles() |
Measure-Object |
Select -ExpandProperty Count) -eq 1)
{$targets += $folder}
}
$targets | Format-Table -Property Name
Isso (deve) chutar uma lista de todas as pastas com um único arquivo nelas. Dê uma boa olhada na lista e certifique-se de que não há pastas não intencionais. Em seguida, você pode executar o comando:
foreach ($target in $targets){Remove-Item -Recurse -Force $target.FullName}
Isso excluirá todas as pastas listadas em $targets
.
Se você precisar modificar esse script, será útil entender o que está fazendo. Por exemplo, como está, você estaria excluindo todas as pastas com subpastas, mas sem arquivos no primeiro diretório . Portanto, se você tiver algo como C:\Users\Forza\Music\SomeArtist\SomeAlbum
, todo o diretório SomeArtist
será excluído. Além disso, todas as pastas vazias permanecerão.
Vamos linha por linha:
-
$targets = @()
define uma matriz. Isso é para que possamos adicionar$folder
s a$targets
sem gerar um erro e garantir que$targets
comece vazio, em vez de adicioná-lo continuamente enquanto modifica nosso script e, eventualmente, excluir mais pastas do que pretendíamos. / li> -
$folders = dir 'C:\Users\Forza\Music\' | Where {$_.mode -match "d"}
lista o conteúdo do diretório e dos pipes especificados que saem para o comandoWhere-Object
.$_.mode -match "d"
pega os objetos encanados e verifica se eles são diretórios. -
foreach ($folder in $folders) {
começa a passar por cada pasta -
if(
inicia uma instrução if para verificar a contagem de arquivos dentro da pasta. Eu dividi cada linha para torná-laconfusalegível. -
$folder.GetFiles() |
esta pega todos os arquivos na pasta que estamos verificando. Observe o pipe, que envia a saída para o próximo comando na próxima linha. -
Measure-Object |
é bastante auto-explicativo. Caso contrário, tente o comandoGet-Help Measure-Object
. -
Select -ExpandProperty Count) -eq 1)
seleciona e expande a propriedadeCount
para que possamos ver se é igual a (-eq
) 1. Observe os dois parênteses de fechamento, um para fechar($folder.GetFiles() | Measure-Object | Select -ExpandProperty Count)
e um para fechar a instruçãoif
. -
{$targets += $folder}
adiciona nossa pasta de correspondência de critérios à nossa lista$targets
. -
}
fecha o loop foreach. -
$targets | Format-Table -Property Name
mostra a lista de pastas para exclusão.
Se você quiser modificar isso para excluir pastas vazias, basta alterar -eq 1
para -lt 2
. Com um pouco de criatividade, você deve ser capaz de fazer o script manipular sua estrutura de arquivos confusa, da maneira que achar melhor.
Para cuidar de uma pasta de Artistas em \ Música, altere o caminho para algo como C:\Users\Forza\Music\*\*\
.