none
Script para deletar arquivos e pastas mantendo uma determinada extensão RRS feed

  • 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
    quinta-feira, 17 de outubro de 2013 18:48

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
    sexta-feira, 18 de outubro de 2013 14:10
    Moderador

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

    quinta-feira, 17 de outubro de 2013 20:46
    Moderador
  • 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
    sexta-feira, 18 de outubro de 2013 13:15
  • 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
    sexta-feira, 18 de outubro de 2013 14:10
    Moderador
  • Ficou perfeito. Obrigado.
    sexta-feira, 18 de outubro de 2013 20:10