none
Unir scripts que apagam arquivos (Filtrar por nome e data do arquivo) RRS feed

  • Pergunta

  • Gabriel,

    Poderia adpatar o script abaixo para ter a opção de exclusao de dias.

    Exemplo.

    Quero deletar tudo dentro das pastas que contenha o nome CONTENCAO  a mais de 5 dias.

    -----------------------------------------------

    On Error Resume Next
    Dim strPastaRaiz, strArquivos, objPastaRaiz, objSubPastas
    strPastaRaiz = "D:\TEMP\BACKUP"
    strArquivos = "\*CONTENCAO*.RAR"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.DeleteFile(strPastaRaiz & strArquivos), True
    
    Set objPastaRaiz = objFSO.GetFolder(strPastaRaiz)
    Set objSubPastas = objPastaRaiz.SubFolders
    For Each SubPasta In objSubPastas
        objFSO.DeleteFile(SubPasta.Path & strArquivos), True
    Next


    -----------------------------------------------

    O seus Scritp esta funcionando, so falta excluir o que esta mais de 5 dias nas pastas.

    Dentro da estrutura de Pasta, tenho varias pastas com estes arquivos que precisam ser excluidos, isto ja esta correto.

    Ja possuo um outro script que faz isto, porem nao sei unir os dois.

    Este abaixo exclui tudo em uma pasta com mais de XX dias.

    ----------------------------------------

    strPasta="H:\HSC\BACKUPS\SRVHSC01\DBS"
    set FSo = CreateObject("Scripting.FileSystemObject")
    Apagar_Arquivos(strPasta)
    Sub Apagar_Arquivos(Pasta)
     set folder = FSO.getFolder (Pasta)
     'Verifica se tem subpastas
     if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       Apagar_Arquivos SubFolder
      next
     end if
     for each file in folder.files
      if (dateDiff("d", file.datecreated, now) >30) then
       File.delete
      end if
     next
     if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
      Folder.delete true
     end if
    end sub


    --------------------

    Aguardo retorno



    • Dividir Fábio JrModerator segunda-feira, 4 de junho de 2012 20:12 Pergunta iniciada em tópico encerrado
    • Editado Fábio JrModerator terça-feira, 5 de junho de 2012 01:38 Formato código
    segunda-feira, 4 de junho de 2012 19:44

Respostas

  • João,

    Usando .VBS dá um pouco de trabalho, serve em PowerShell (.PS1)?

    Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | 
        where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | 
        remove-item

    Isto é apenas uma linha.

    Veja que ele lista apenas os arquivos *contecao*.rar dentro da pasta d:\temp\backup e com mais de 5 dias da data de criação.


    Fábio de Paula Junior

    terça-feira, 5 de junho de 2012 11:59
    Moderador

Todas as Respostas

  • João,

    Usando .VBS dá um pouco de trabalho, serve em PowerShell (.PS1)?

    Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | 
        where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | 
        remove-item

    Isto é apenas uma linha.

    Veja que ele lista apenas os arquivos *contecao*.rar dentro da pasta d:\temp\backup e com mais de 5 dias da data de criação.


    Fábio de Paula Junior

    terça-feira, 5 de junho de 2012 11:59
    Moderador
  • Fabio,

    Serve sim, o mesmo roda igual o VBS, BAT...?

    Porem preciso do script inteiro, nao sei desenvolver nestas linguagens, alias, em nenhuma, apenas adpato o que consigo na NET.

    Joao Marcos Pucci

    terça-feira, 12 de junho de 2012 17:04
  • João,

    Roda um pouco diferente do .VBS e .BAT, os arquivos tem a extensão .PS1 e não é simplesmente dar um duplo clique. Se for de um prompt tradicional você tem que utilizar assim:

    powershell -file nome_do_script.ps1

    De dentro do prompt do powershell você pode executar escrevendo o nome do arquivo, vou adicionar no final um artigo ensinando a agendar um script powershell, pode ser muito útil.

    O script que eu havia passado já está completo, você pode testar ele da seguinte forma:

    1) Abra o prompt do powershell

    2) Execute o comando

    Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR 

    isso vai listar todos os arquivos *contencao*.rar

    3) Agora escreva o mesmo comando e adicione pipe "|" mais um comando que vai filtrar os arquivos por data

    Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | 
    

    4) Se listar apenas o que vc quer fica faltando apenas apagar então adicione mais um pipe e depois o comando de apagar (remove-item)

    Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR |  where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | remove-item

    Agora no script vc pode (ou não) quebrar a linha a cada pipe, funciona como se fosse uma unica linha, cada comando vai jogando seu resultado para o comando seguinte.

    Ref.:

    Use Scheduled Tasks to Run PowerShell Commands on Windows

    http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/12/use-scheduled-tasks-to-run-powershell-commands-on-windows.aspx


    Fábio de Paula Junior

    terça-feira, 12 de junho de 2012 23:20
    Moderador
  • Amigo, Fabio,

    Como monto o script para rodar pelo agendador?

    segunda-feira, 25 de junho de 2012 18:57
  • João Marcos,

    O script vc coloca dentro de uma arquivo .PS1

    Você deve agendá-lo conforme o link que passei anteriormente.


    Fábio de Paula Junior

    terça-feira, 26 de junho de 2012 20:46
    Moderador