none
Criar .bat para mover arquivos de uma pasta criados a mais de 30 dias com extensão especifica e gerar log de arquivos movidos RRS feed

  • Pergunta

  • Preciso criar .bat para mover arquivos  de uma pasta criados a mais de 30 dias com extensão especifica (.sav) e gerar log de arquivos movidos , é possivel????
    sexta-feira, 3 de julho de 2009 13:21

Respostas

  • Olá,

    Veja se te atende:


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

    'Coloque aqui a pasta que será verificada
    strPasta = "\\server\compartilhamento"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "C:\teste\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "log;jpg;mp3;avi"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\teste.txt"

    'quantidade de dias
    strData = 20

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

    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files  
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name
                End If
             Next
          Next
    End if

    wscript.quit


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Bruno_Renan sexta-feira, 10 de julho de 2009 14:21
    sexta-feira, 3 de julho de 2009 14:50

Todas as Respostas

  • Olá,

    Veja se te atende:


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

    'Coloque aqui a pasta que será verificada
    strPasta = "\\server\compartilhamento"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "C:\teste\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "log;jpg;mp3;avi"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\teste.txt"

    'quantidade de dias
    strData = 20

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

    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files  
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name
                End If
             Next
          Next
    End if

    wscript.quit


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Bruno_Renan sexta-feira, 10 de julho de 2009 14:21
    sexta-feira, 3 de julho de 2009 14:50
  • Olá eu rodei o script abaixo com as alterações

    strComputer = "."
    Set objWMIService = GetObject<"winmgmts:\\" & strComputer & "\root\cimv2">
    Set objFSO = CreateObject<"Scripting.FileSystemObject">

    'Coloque aqui a pasta que será verificada
    strPasta = "C:\Teste"

    'Coloque aqui a pasta para a qual os arquivos serão copiados
    strDest = "C:\Teste2\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ","
    arrTipos = "log,jpg,mp3,avi"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\teste.txt"

    'quantidade de dias
    strData = 20

    arrTipos = split
    Set objLogFile = objFSO.OpenTextFile
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS MOVIDOS EM: " & now
    objLogFile.WriteLine "==================================================="

    If = True> Then
       Set Folder = ObjFSO.GetFolder
       Set MyFiles = Folder.files 
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right = tipo And DateDiff<"d",myfiles.DateLastModified,now> > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name
                End If
             Next
          Next
    End if

    wscript.quit

    E ele apresenta a seguinte mensagem de erro :

    Linha: 2
    Caract.: 75
    Erro: Erro de Sintaxe
    Codigo 800A03EA
    Origem: Erro de compliação do Microsoft VBScript

    quarta-feira, 8 de julho de 2009 15:57
  • Olá,

    O script que você colocou está errado, verifique abaixo:

    Set objWMIService = GetObject<"winmgmts:\\" & strComputer & "\root\cimv2">

    O correto é:
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    o caractere "<" está errado. O correto é "(" (Parenteses)

    O mesmo acontece nas linhas abaixo:
    Set objFSO = CreateObject<"Scripting.FileSystemObject">

    O correto é:

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Faça a correçao e teste o script.

    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    quarta-feira, 8 de julho de 2009 16:19
  • Após as correções ele ficou assim :

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

    'Coloque aqui a pasta que será verificada
    strPasta = "C:\Teste"

    'Coloque aqui a pasta para a qual os arquivos serão copiados
    strDest = "C:\Teste2\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ","
    arrTipos = "sav"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\teste.txt"

    'quantidade de dias
    strData = 20

    arrTipos = split
    Set objLogFile = objFSO.OpenTextFile
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS MOVIDOS EM: " & now
    objLogFile.WriteLine "==================================================="

    If = True> Then
       Set Folder = ObjFSO.GetFolder
       Set MyFiles = Folder.files 
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right = tipo And DateDiff<"d",myfiles.DateLastModified,now> > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name
                End If
             Next
          Next
    End if

    wscript.quit

    Mas continua dando erro segue o mesmo :

    Linha: 27
    Caract.: 4
    Erro: Erro de Sintaxe
    Codigo 800A03EA
    Origem: Erro de compliação do Microsoft VBScript
    quarta-feira, 8 de julho de 2009 17:25
  • Olá,

    Bruno, está faltando coisas no script que você postou.

    Recomendo você pegar o script que te passei e ajustar as variaveis novamente.

    Faça isso e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 8 de julho de 2009 17:35
  • Agora rodou mas não está movendo os arquivos pra pasta , ele gera o log mas nao muda arquivo nenhum.

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

    'Coloque aqui a pasta que será verificada
    strPasta = "C:\Teste\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "C:\Teste2\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "sav.pdf"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\teste.txt"

    'quantidade de dias
    strData = 30

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

    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files  
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name
                End If
             Next
          Next
    End if

    wscript.quit
    quarta-feira, 8 de julho de 2009 17:43
  • Falha minha esqueci de colocar o ponto e virgula entre as extenções de arquivos.
    quarta-feira, 8 de julho de 2009 17:45
  • Olá,

    Ahh e funcionou certinho agora???

    Poste os resultados.



    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 8 de julho de 2009 20:36
  • Sim funcionou corretamente!!!

    Muito obrigado!!!
    sexta-feira, 10 de julho de 2009 14:21
  • Aprovietando o tópico..
    Senhores, Andei pesquisando sobre o assunto e até achei alguns exemplos porém nada que realmente atenda minha necessidade.
    O problema é o seguinte...  Tenho um Servidor no qual precisso mover os arquivos e pastas não usados há mais de 01 ano para outro servidor a fim de liberar espaço.
    O problema é que no servidor de Destino deverá manter a mesma estrututa de pastas do servidor de origem, ou seja, se no servidor de origem conter um arquivo antigo na pasta \\ORIGEM\TESTE\ARQUIVO.TXT   este deverá ser movido para \\DESTINO\TESTE\ARQUIVO.TXT

    Outra coisa...  como faço para que a busca seja feita nas pastas e subpastas e buscar todos os arquivos (*.*).

    Espero que possam me ajudar.
    sexta-feira, 5 de março de 2010 12:55
  • Olá,

    Ahh e funcionou certinho agora???

    Poste os resultados.



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    Jesiel,

           esse script está deletando os arquivos com mais de 20 dias ? ou ele copia os arquivos com mais de 20 dias ? como ficaria o código se eu não optasse por apagar nada, apenas copiar ? Aguardo um retorno.

    terça-feira, 18 de maio de 2010 14:03
  • E ae Jesiel blz?

    Eu utilizei o script e funcionou muito bem.


    Gostaria de saber como faço para que ele verifique todas as subpastas do caminho indicado. Tem como?

     

    Obrigado.

     

    Att,
    Albert Silva

    quinta-feira, 25 de novembro de 2010 03:07
  • Como eu faço para enviar pastas ?
    segunda-feira, 4 de abril de 2011 15:10
  • Olá pessoal,

    peguei esse bat para criar uma rotina de backup mas no windows server 2008 ele abre executa rapidinho e já fecha sem executar a tarefa alguem sabe me informar o porque?

    Eu já instalei o client do telnet.

    strComputer = "."

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Set objFSO = CreateObject("Scripting.FileSystemObject")


    'Coloque aqui a pasta que será verificada

    strPasta = "C:\Backups\"


    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)

    strDest = "G:\Backups\"


    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"

    arrTipos = "bak;trn"


    ' NOME DO ARQUIVO DE LOG

    strLogFile = "c:\teste.txt"


    'quantidade de dias

    strData = 30


    arrTipos = split(arrTipos,";")

    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)

    objLogFile.WriteLine  VBCRLF

    objLogFile.WriteLine "==================================================="

    objLogFile.WriteLine "ARQUIVOS MOVIDOS EM: " & now

    objLogFile.WriteLine "==================================================="


    If (objFSO.FolderExists(strPasta) = True) Then

       Set Folder = ObjFSO.GetFolder(strPasta)

       Set MyFiles = Folder.files  

          For Each tipo in arrTipos

             For Each MyFiles in Folder.Files

                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then

                   objFSO.Copyfile strPasta & myfiles.name,strDest,True

                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " copiado em : " & Now

                   objFSO.Deletefile strPasta & myfiles.name

                End If

             Next

          Next

    End if

    wscript.quit

    quarta-feira, 20 de abril de 2011 14:55
  • Olá...

    Depois de muito tempo encontrei esse post... 

    Para arquivos ok, funcionando 100%, mas estou precissando pra mover Pastas "Diretorios"

    Teria como me dar uma ajuda ae

    terça-feira, 10 de julho de 2012 20:38
  • Bom dia. Como ficaria o script caso eu queira copiar arquivos com uma faixa de data, por exemplo vou criar uma pasta "Janeiro", depois vou mover todos arquivos da pasta "A" para Janeiro com datas entre dia 01/01/2014 até 31/01/2014.

    Obrigado!

    segunda-feira, 22 de dezembro de 2014 10:41
  • Rodrigo,

    Você tem que alterar esta linha

    If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then


    Seu exemplo de Janeiro deve ficar mais ou menos assim (não testei)

    if (myfiles.DateLastModified >= #01/01/2014# and myfiles.DateLastModified <= #31/01/2014#) then

    Se vai mover tem que usar o comando de mover ao invés de delete.

    Este tópico já está encerrado (com resposta), se isso que eu passei não resolver abra um tópico fazendo a referência a este.


    Fábio de Paula Junior

    segunda-feira, 22 de dezembro de 2014 13:19
    Moderador
  • Obrigado pela dica. Fábio.
    terça-feira, 23 de dezembro de 2014 14:13