none
Script para deletar arquivos e pastas antigos RRS feed

  • Pergunta

  • Olá Pessoal,

    Já fiz uma busca grande por aqui e não encontrei nada específico para minha dúvida. Sou totalmente leigo no assunto, quero aprender sobre isso, porém hoje preciso de uma ajuda pontual.

    Tenho um servidor que faz backup diariamente, inclusive é o servidor do Sharepoint. Ele faz backups com a seguinte estrutura de pasta:

    C:\backup\spbr0001

    C:\backup\spbr0002

    e gera um arquivo .xml de informações para caso seja necessário restaurar um backup:

    c:\backup\spbrtoc.xml

    Tem algum script para deletar as pastas, subpastas e arquivos destas pastas, modificadas com mais de 15 dias da data atual?

    Os scripts que encontrei só deletavam arquivos dentro das pastas e subpastas e não as subpastas em si.

    Se for em .bat é mais fácil pois entendo mais. Agora se for em .vbs daí eu tenho que entender melhor um pouco.

    Se puderem contribuir, agradeço.

    Obrigado!

    terça-feira, 8 de maio de 2012 18:35

Respostas

  • Guilherme,

    Tente este em PowerShell

    #configura script
    $Pasta="c:\Backup"
    $n = 15 #Arquivos com mais de "n" dias serão apagados
    
    $Arquivo_Excessao="C:\Backup\spbrtoc.xml"
    
    #inicio do script ==============
    # Seleciona Arquivos
    $Arquivos_Deletar = gci $Pasta -r | Where { (-not $_.PsIsContainer) -and ($_.LastWriteTime -lt (date).addDays(-$n)  -and ($_.FullName -ne $Arquivo_Excessao)  ) }
    # Apaga
    if (!($Arquivos_Deletar -eq $null)){$Arquivos_Deletar | Remove-Item -Force}
    
    # Seleciona pastas vazias
    $Pasta_Vazias = Get-ChildItem $Pasta -Recurse | Where {($_.PsIsContainer)}
    
    if ($Pasta_Vazias -ne $null){
        foreach($PV in $Pasta_Vazias)
        {
            
            $subitems = Get-ChildItem -Recurse -Path $PV.FullName
            if($subitems -eq $null)
            {
                "Remove item: " + $PV.FullName
                Remove-Item $PV.FullName 
            }
            $subitems = $null
             
        }
    }
     
    


    Fábio de Paula Junior

    • Marcado como Resposta Guilherme Vital sexta-feira, 18 de maio de 2012 11:24
    quarta-feira, 16 de maio de 2012 02:50
    Moderador

Todas as Respostas

  • Guilherme,

    Teste um dos scripts abaixo, se não funcionar informe qual script vc testou, suas alterações e qual foi o comportamento (ex: não apagou pasta ou não apagou arquivo algum)

    Script para deletar arquivos antigos?

    http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/71eba2a5-24ea-4142-b10c-aae57ae709dd

    Script para deletar arquivos antigos

    http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/e92bb1e0-462c-4d84-9889-bf224d031b71


    Fábio de Paula Junior

    terça-feira, 8 de maio de 2012 20:25
    Moderador
  • Fabio.. obrigado por ajudar, porem nao consegui ainda o que queria..

    O primeiro deletou tudo.. inclusive a pasta "pai" e os arquivos novos dentro dela

    O segundo deletou somente os arquivos.. e não as subpastas dentro dessa pasta "pai"

    Preciso assim:

    \Pasta Pai - Não deletar

    \Pasta Pai\Subpasta - Deletar tudo o que tiver dentro, inclusive a subpasta se esta foi criada a mais de 15 dias.

    \Past Pai\arquivo.xml - Não deletar

    Se puderem ajudar, agradeço.

    Obrigado.

    sexta-feira, 11 de maio de 2012 18:40
  • Guilherme,

    Tente este em PowerShell

    #configura script
    $Pasta="c:\Backup"
    $n = 15 #Arquivos com mais de "n" dias serão apagados
    
    $Arquivo_Excessao="C:\Backup\spbrtoc.xml"
    
    #inicio do script ==============
    # Seleciona Arquivos
    $Arquivos_Deletar = gci $Pasta -r | Where { (-not $_.PsIsContainer) -and ($_.LastWriteTime -lt (date).addDays(-$n)  -and ($_.FullName -ne $Arquivo_Excessao)  ) }
    # Apaga
    if (!($Arquivos_Deletar -eq $null)){$Arquivos_Deletar | Remove-Item -Force}
    
    # Seleciona pastas vazias
    $Pasta_Vazias = Get-ChildItem $Pasta -Recurse | Where {($_.PsIsContainer)}
    
    if ($Pasta_Vazias -ne $null){
        foreach($PV in $Pasta_Vazias)
        {
            
            $subitems = Get-ChildItem -Recurse -Path $PV.FullName
            if($subitems -eq $null)
            {
                "Remove item: " + $PV.FullName
                Remove-Item $PV.FullName 
            }
            $subitems = $null
             
        }
    }
     
    


    Fábio de Paula Junior

    • Marcado como Resposta Guilherme Vital sexta-feira, 18 de maio de 2012 11:24
    quarta-feira, 16 de maio de 2012 02:50
    Moderador
  • Boa Tarde Guilherme,

    Conseguiu resolver o seu caso, informe se funcionou.

    Abs,
    Wagner S. Vasconcellos
    quinta-feira, 17 de maio de 2012 16:04
    Moderador
  • Boa tarde,

    Então amigos, ele não deletou as subpastas, somente os arquivos dentro delas... A pasta do backup de hoje não foi removida...

    Acredito que ele não delete as subpastas, pois quando vc deleta os arquivos ele altera a data de modificação de subpastas para a data atual. Mesmo enviando comando pra deletar pastas vazias... Achei estranho.

    Se puderem ajudar, agradeço!


    sexta-feira, 18 de maio de 2012 11:17
  • Acho que agora funcionou pessoal... acho que tinha colocado algum parametro errado.

    Bom, vou testando.. qualquer coisa eu posto aqui..

    Obrigado..

    Abraços

    sexta-feira, 18 de maio de 2012 11:24