Usuário com melhor resposta
Script para deletar arquivos e pastas mantendo uma determinada extensão

Pergunta
-
Senhores,
Preciso de um script que exclui todos os arquivos e pastas, com exceção e uma determinada extensão, tipo .xyb
Encontrei esse script do Fábio de Paula Junior, só que não sei adapta-lo para ignorar uma determinada extensão ao invés de ignorar uma pasta. Alguém pode dar uma ajuda?
Segue script original. Eu prefiro em vbs, mas qualquer ajuda é válida.
$Items = Get-ChildItem -Path C:\Teste foreach($item in $Items){ if($item.name -ne "x_teste"){ Remove-Item $item.fullname -recurse } }
- Editado Fábio JrModerator quinta-feira, 17 de outubro de 2013 20:15 Formatação do código
Respostas
-
K.ryn,
Teste este.
$Pasta="D:\Teste" #Pega todos os arquivos, não pega diretórios $Items = Get-ChildItem -Path $Pasta -recurse | ? {$_.PSIsContainer -eq $false} foreach($item in $Items){ if(($item.Extension -ne ".pps") -and ($item.Extension -ne ".ppsx")) { Remove-Item $item.fullname } } #apaga diretórios vazios (gci $Pasta -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | Remove-Item
Modificações:
- Quando eu pego a lista de arquivos eu tirei as pastas;
- No final adicionei um procedimento para apagar as pastas vazias.
Ref.
Finding All the Empty Folders in a Directory Tree
http://technet.microsoft.com/en-us/library/ff730953.aspx
Fábio de Paula Junior
- Editado Fábio JrModerator sexta-feira, 18 de outubro de 2013 14:14 add link
- Marcado como Resposta K.ryn sexta-feira, 18 de outubro de 2013 20:09
Todas as Respostas
-
Duas formas:
1) Modificando o script que você conhece
$Items = Get-ChildItem -Path C:\Teste foreach($item in $Items){ if($item.Extension -ne ".xyb"){ Remove-Item $item.fullname -recurse } }
2) Uma única linha
Get-ChildItem -Exclude "*.xyb" -recurse | Remove-Item
Teste com prudência.
Fábio de Paula Junior
-
Fabio,
Obrigado pela ajuda. Adaptei o script para ignorar mais de uma extensão.
Ele preserva os arquivos fora das pastas, com base na extensão, só que, se eu tiver arquivos do tipo a ser ignorado dentro de pastas, ele exclui as pastas e também os arquivos (que deveriam ser ignorados com base na extensão). Tem alguma sugestão para que ele só exclua as pastas se dentro delas não tiver arquivos com extensão definida?
Segue script alterado:
$Items = Get-ChildItem -Path D:\Teste foreach($item in $Items){ if(($item.Extension -ne ".pps") -and ($item.Extension -ne ".ppsx")) { Remove-Item $item.fullname -recurse } }
- Editado Fábio JrModerator sexta-feira, 18 de outubro de 2013 13:38 Formatação do Código
-
K.ryn,
Teste este.
$Pasta="D:\Teste" #Pega todos os arquivos, não pega diretórios $Items = Get-ChildItem -Path $Pasta -recurse | ? {$_.PSIsContainer -eq $false} foreach($item in $Items){ if(($item.Extension -ne ".pps") -and ($item.Extension -ne ".ppsx")) { Remove-Item $item.fullname } } #apaga diretórios vazios (gci $Pasta -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | Remove-Item
Modificações:
- Quando eu pego a lista de arquivos eu tirei as pastas;
- No final adicionei um procedimento para apagar as pastas vazias.
Ref.
Finding All the Empty Folders in a Directory Tree
http://technet.microsoft.com/en-us/library/ff730953.aspx
Fábio de Paula Junior
- Editado Fábio JrModerator sexta-feira, 18 de outubro de 2013 14:14 add link
- Marcado como Resposta K.ryn sexta-feira, 18 de outubro de 2013 20:09
-