none
Bat ou VBS para apagar arquivos e pastas ... RRS feed

  • Pergunta

  • Olá pessoal, tudo bem?

    Preciso criar um script em bat ou vbs (não importa) que apague determinadas pastas aqui no meu servidor.

    Tenho a seguinte estrutura de pastas:

    PUBLIC que fica dentro do meu HD e:\

    Dentro da PUBLIC, eu tenho 3 pastas que são: COMUM, CXPOSTAL E INTERNO ...

    Até aqui, não há problemas, sendo o que quero realmente fazer é apagar TUDO que tenho dentro da pasta COMUM,  exceto as pastas ATALHOS E SCANNER, e ainda apagar os arquivos que estão dentro da pasta SCANNER ...

    Programação disso não há nenhum problema, posso executar todo domingo a noite via agendador de tarefas do Windows 2003 Server. Meu problema é não apagar as 2 pastas citadas, mas efetuar a limpeza ...

    Alguém pode me dar alguma ajuda ???

    Abraços a todos

    segunda-feira, 14 de setembro de 2009 16:33

Respostas

  • Olá,

    Verifique assim:


    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada
    strPasta = "c:\public\COMUM"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "log.txt"

    'pastas que serao mantidas
    arrpastas = "COMUM,ATALHOS,SCANNER"

    'pastas que deve apagar apenas o conteúdo
    arrsoCont = "SCANNER"



    arrPastas = Split(arrPastas,",")
    arrsoCont = Split(arrsoCont,",")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS DELETADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)


    wscript.echo "FIM DO SCRIPT"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       lDeleta = FALSE
       lsoCont = FALSE
       for y = 0 to UBOUND(arrPastas)
          if instr(SubFolder.name,arrPastas(y)) > 0 Then
            lDeleta = TRUE
          End if
       Next
       For z = o to UBOUND(arrsoCont)
          if instr(SubFolder.name,arrsoCont(z)) > 0 Then
            lsoCont = TRUE
          End if 
       Next


       if lDeleta = FALSE Then
          GeraLog SubFolder.Path
          ChecaArquivo SubFolder.path
          if SubFolder.size = 0 Then
             SubFolder.delete
          End if
       Else

          if lsoCont = TRUE Then
             GeraLog SubFolder.Path
             ChecaArquivo SubFolder.path
          End if
       End if
    Next


    End sub



    '====================================================================

    Sub GeraLog(strCaminho)


    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       objLogFile.WriteLine "ARQUIVO DELETADO : "  & myfiles.path &  " deletado em : " & Now
       objFSO.deletefile Myfiles.path
    Next
    End sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Rodrigo R. _ terça-feira, 15 de setembro de 2009 15:37
    terça-feira, 15 de setembro de 2009 11:32

Todas as Respostas

  • Olá,

    Faça os testes no script abaixo:

    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada
    strPasta = "e:\public"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "log.txt"

    'pastas que serao mantidas

    arrpastas = "COMUM,ATALHOS,SCANNER"

    arrPastas = Split(arrPastas,",")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS DELETADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)


    wscript.echo "FIM DO SCRIPT"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       GeraLog SubFolder.Path
       ChecaArquivo SubFolder.path
       lDeleta = FALSE
       for y = 0 to UBOUND(arrPastas)

          if instr(SubFolder.name,arrPastas(y)) > 0 Then
            wscript.echo subFolder.name
            lDeleta = TRUE
          End if
       Next
       if lDeleta = FALSE Then
          objLogFile.WriteLine "PASTA DELETADA : "  & subFolder.path &  " deletado em : " & Now
          objFSO.deletefolder(SubFolder.Path)

       End if
    Next


    End sub



    '====================================================================

    Sub GeraLog(strCaminho)


    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       objLogFile.WriteLine "ARQUIVO DELETADO : "  & myfiles.path &  " deletado em : " & Now
       objFSO.deletefile Myfiles.path
    Next
    End sub


    Faça os testes em ambiente teste e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    segunda-feira, 14 de setembro de 2009 18:35
  • Amigo Jesiel, em primeiro lugar, muito obrigado por sua ajuda ...!!!


    Vamos ver se consigo te ajudar de uma forma melhor para que você consiga assim me ajudar melhor ...

    A minha estrutura de pastas consiste no seguinte:

    Tenho uma pasta chamada PUBLIC no meu hd. Dentro desta pasta PUBLIC, possuo mais 3 pastas que são: COMUM, CXPOSTAL e INTERNO. iremos trabalhar somente na pasta COMUM ok ... O que estiver dentro da CXPOSTAL E INTERNO não vamos mecher OK ...  e pelo que pude ver, seu script apagou tudo que tinha dentro delas também !!!

    Vamos focar na pasta COMUM, que está dentro da PUBLIC. Dentro desta pasta eu posso apagar TUDO, inclusive pastas criadas por usuários e arquivos dentro destas pastas, porém, há pelo menos DUAS PASTAS QUE EU NÃO POSSO APAGAR DE MANEIRA ALGUMA, essas pastas se chamam ATALHOS e SCANNER ...

    Desculpe as letras maiúsculas, não há intuito de gritar, mas sim, destacar...

    Outra coisinha, gostaria que o script não mostrasse o que está sendo feito, como no início e fim, mas é muito útil, assim podemos monitorar o que foi apagado, se ele puder gerar o arquivo de log por data, por exemplo 090909.log, ai fica perfeito ...

    Do mais, só tenho em te agradecer e dizer o quanto sou "noob" em relação a isso ...

    Abraços - Rodrigo

    segunda-feira, 14 de setembro de 2009 20:37
  • Olá,

    Verifique assim:


    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada
    strPasta = "c:\public\COMUM"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "log.txt"

    'pastas que serao mantidas

    arrpastas = "COMUM,ATALHOS,SCANNER"

    arrPastas = Split(arrPastas,",")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS DELETADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)


    wscript.echo "FIM DO SCRIPT"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       lDeleta = FALSE
       for y = 0 to UBOUND(arrPastas)

          if instr(SubFolder.name,arrPastas(y)) > 0 Then
            lDeleta = TRUE
          End if
       Next
       if lDeleta = FALSE Then
          GeraLog SubFolder.Path
          ChecaArquivo SubFolder.path
          if SubFolder.size = 0 Then
             SubFolder.delete
          End if

         

       End if
    Next


    End sub



    '====================================================================

    Sub GeraLog(strCaminho)


    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       objLogFile.WriteLine "ARQUIVO DELETADO : "  & myfiles.path &  " deletado em : " & Now
       objFSO.deletefile Myfiles.path
    Next
    End sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    segunda-feira, 14 de setembro de 2009 21:46
  • Amigo Jesiel ...

    Cheguei ansioso da faculdade e vim testar seu script ...

    Para eu te dizer que está "perfeito", falta somente uma coisinha:

    Apagar todos os arquivos dentro da pasta SCANNER se possível ...

    E em outra localidade, terei outras pastas que terei que manter, mas apagar o conteúdo, exatamente como deve acontecer na pasta SCANNER... será que conseguimos ???

    Grande abraço e desculpe-me por qualquer coisa ...

    Rodrigo
    terça-feira, 15 de setembro de 2009 02:31
  • Olá,

    Verifique assim:


    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada
    strPasta = "c:\public\COMUM"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "log.txt"

    'pastas que serao mantidas
    arrpastas = "COMUM,ATALHOS,SCANNER"

    'pastas que deve apagar apenas o conteúdo
    arrsoCont = "SCANNER"



    arrPastas = Split(arrPastas,",")
    arrsoCont = Split(arrsoCont,",")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS DELETADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)


    wscript.echo "FIM DO SCRIPT"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       lDeleta = FALSE
       lsoCont = FALSE
       for y = 0 to UBOUND(arrPastas)
          if instr(SubFolder.name,arrPastas(y)) > 0 Then
            lDeleta = TRUE
          End if
       Next
       For z = o to UBOUND(arrsoCont)
          if instr(SubFolder.name,arrsoCont(z)) > 0 Then
            lsoCont = TRUE
          End if 
       Next


       if lDeleta = FALSE Then
          GeraLog SubFolder.Path
          ChecaArquivo SubFolder.path
          if SubFolder.size = 0 Then
             SubFolder.delete
          End if
       Else

          if lsoCont = TRUE Then
             GeraLog SubFolder.Path
             ChecaArquivo SubFolder.path
          End if
       End if
    Next


    End sub



    '====================================================================

    Sub GeraLog(strCaminho)


    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       objLogFile.WriteLine "ARQUIVO DELETADO : "  & myfiles.path &  " deletado em : " & Now
       objFSO.deletefile Myfiles.path
    Next
    End sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Rodrigo R. _ terça-feira, 15 de setembro de 2009 15:37
    terça-feira, 15 de setembro de 2009 11:32
  • Jesiel ...


    P-E-R-F-E-I-T-O agora !!!

    A única coisa a ser lembrada é que devemos escerver no código  a grafia da pasta exatamente como ela é, ou seja, se estiver criada como Atalhos e você colocar ATALHOS, ele ignora e passa batido. Apenas alterei par Atalhos (exatamente como ela foi criada) e ai tudo se resolveu ...

    Vou submeter o código com os devidos créditos ao meu coordenador o qual se encarregará de efetuar demais testes e homologação do mesmo ... mas já testei em meu micro e funcionou a contento !!!

    Amigo, gostaria de aprender mais sobre scripts administrativos, poderia me recomendar alguma leitura, site ou algo para começar a estudar, lembrando que sou iniciante e não conheço praticamente nada !!!

    Grande abraço !!!

    Rodrigo
    terça-feira, 15 de setembro de 2009 12:53
  • Olá,

    Bacana Rodrigo, vou postar alguns links para seu inicio...

    http://gallery.technet.microsoft.com/ScriptCenter/en-us/

    http://www.microsoft.com/technet/scriptcenter/resources/qanda/nov06/hey1116.mspx

    Bom estudo!

    Marque a resposta correta como resposta para finalizarmos o post.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique



    terça-feira, 15 de setembro de 2009 14:03
  • Amigo .. obrigado pelos links ...

    Vou dar uma estudada nisso ...

    Abraços !
    terça-feira, 15 de setembro de 2009 15:37
  • Olá Jesiel,

    Estava pesquisando um script para colocar em meu servidor e o seu script foi de uma utilidade muito grande, fiz algumas modificações para que se encaixasse aqui no server, mas funcionou muito bem...

    Parabéns.....


    Thiago Vinicius da Silva - MCP Win2K3 | MCP Win XP | MCDST
    terça-feira, 22 de junho de 2010 15:34
  • Boa tarde.

    Entrei aqui só para agradecer, obrigado Jesiel foi muito util pra mim o seu script, thks!

    sábado, 14 de maio de 2011 18:41
  • Olá,

    Faça os testes no script abaixo:

    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada
    strPasta = "e:\public"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "log.txt"

    'pastas que serao mantidas

    arrpastas = "COMUM,ATALHOS,SCANNER"

    arrPastas = Split(arrPastas,",")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS DELETADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)


    wscript.echo "FIM DO SCRIPT"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       GeraLog SubFolder.Path
       ChecaArquivo SubFolder.path
       lDeleta = FALSE
       for y = 0 to UBOUND(arrPastas)

          if instr(SubFolder.name,arrPastas(y)) > 0 Then
            wscript.echo subFolder.name
            lDeleta = TRUE
          End if
       Next
       if lDeleta = FALSE Then
          objLogFile.WriteLine "PASTA DELETADA : "  & subFolder.path &  " deletado em : " & Now
          objFSO.deletefolder(SubFolder.Path)

       End if
    Next


    End sub



    '====================================================================

    Sub GeraLog(strCaminho)


    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       objLogFile.WriteLine "ARQUIVO DELETADO : "  & myfiles.path &  " deletado em : " & Now
       objFSO.deletefile Myfiles.path
    Next
    End sub


    Faça os testes em ambiente teste e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    Prezado Jessiel;

     

    Como eu faço para apagar arquivos em multiplos lugares usando esse principio...ja tentei adicionando linhas mas não funcionou...pode me ajudar

    quinta-feira, 24 de novembro de 2011 13:07
  • Jesiel, mto bom seu script.

     

    Testado e aprovado!!!

    quarta-feira, 14 de dezembro de 2011 15:54
  • Boa Tarde @jesiel

    tenho o mesmo ituito do @rodrigo porem nao quero deixar nada na estrutura, como faco nesse caso, pois li o script e ele pede pra preservar as pastas!

    tem como me ajudar?


    Douglas Santos Analista de Suporte

    terça-feira, 28 de fevereiro de 2012 19:16
  • Muito bom o seu Script, implementei ele aqui na empresa e está funcionando tendo que tirar uma linha e echo FIM SCRIPT

    somente uma observação, como poderíamos fazer ele continuar executando quando se tem um arquivo em aberto?

    segunda-feira, 1 de junho de 2015 16:56
  • Olá,

    Bom, tenho um pasta de backup que faz novos backups diariamente, logo eu preciso apenas dos dois últimos arquivos gerados,

    EX: Dia 10 ele gerou uma Pasta, Dia 11 ele gerou outra, Dia 12 outra. Hoje é dia 13 então eu precisaria manter apenas as pastas do dia 11 e 12, excluindo a pasta do dia 10, no caso de dois dias atrás. 

    Minha pasta tem o seguinte caminho: \\192.168.0.246\carneiros 214\carneiros

    desde já agradeço, Forte abraço

    Atenciosamente

    Danrlley Santos 

    quinta-feira, 19 de novembro de 2015 13:13