none
Script para Copiar Arquivo, verificando data de modificação RRS feed

  • Pergunta

  • Boa tarde galera,
    Estou precisando de um script para copiar arquivos de uma pasta para outra, porém só posso copiar/substituir estes arquivos para a pasta destino se estes forém mais novos (data/hora) que os atuais.

    Desde já agradeço.

    Sds,
    Ranisses A. Corona

    • Editado Ranisses sexta-feira, 20 de novembro de 2009 18:24 Titulo errado
    sexta-feira, 20 de novembro de 2009 18:24

Respostas

  • Oi Marcellus.
    Kra estou precisando do seguinte... tenho um executavel que preciso atualizar em alguns computadores da empresa, sempre que sair uma nova versão. Por isso pensei no script, verificando a data dos arquivos nas estações com a data do arquivo no servidor, e se este for mais novo então copia para as estações.

    Se tiver outro jeito, aceito sugestões.

    sds,
    Ranisses A. Corona


    Ranisses, boa tarde.

    Existem algumas formas.

    1 - É um arquivo de ERP? Ele teria como ao invez de ser copiado ser inserido apenas um Atalho?

    2 - Vbs, seu script de logon é VBS?  Se sim pode usar um modelo parecido com esse:

    Set objNetwork = CreateObject("Wscript.Network")
    Set strFolder = CreateObject("Scripting.FileSystemObject")

    strOrigem = "\\servidor\pasta\arquivo"
    strCaminho =  "c:\Documents and Settings\All Users\Desktop"

    If strFolder.FolderExists (strCaminho) = False Then
       strFolder.CreateFolder (strCaminho)
       copiaArquivo strOrigem,strCaminho
    Else
       copiaArquivo strOrigem,strCaminho
    End If

    Sub CopiaArquivo(origem,Destino)

    strFolder.CopyFile origem , destino & "\" , true

    End Sub

    3 - Seu script de logon é batch file (.bat) ? Se sim pode usar o proprio xCopy do windows. 

    Copia arquivos e  arvores de diretorios.

    XCOPY origem [destino] [/A | /M] [/D[:data]] [/P] [/S [/E]] [/V] [/W]
                               [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                               [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                               [/EXCLUDE:arquivo1[+arquivo2][+arquivo3]...]

      origem       Especifica o(s) arquivo(s) a ser(em) copiado(s).
      destino  Especifica o local e/ou o nome dos novos arquivos.
      /A           Copia somente arquivos com o atributo de arquivamento
                   definido; nÆo altera o atributo.
      /M           Copia somente arquivos com o atributo de arquivamento
                   definido; desativa o atributo de arquivamento.
      /D:m-d-a     Copia os arquivos alterados durante ou ap¢s a data
                   especificada. Se nÆo for definida uma data, copia apenas os
                   arquivos cujo tempo de origem seja mais novo do que o tempo
                   de destino.
      /EXCLUDE:arquivo1[+arquivo2][+arquivo3]...
                   Especifica uma lista de arquivos contendo cadeias de
                   caracteres. Cada cadeia deve estar em uma linha separada nos
                   arquivos. Quando qualquer cadeia corresponder a qualquer parte
                   do caminho absoluto do arquivo a ser copiado, esse arquivo
                   deixar  de ser copiado. Por exemplo, especificar uma cadeia de
                   caracteres como \obj\ ou .obj excluir  todos os arquivos sob o
                   diret¢rio obj ou com a extensÆo .obj, respectivamente.
      /P           Solicita confirma‡Æo antes de criar cada arquivo de destino.
      /S           Copia diret¢rios e subdiret¢rios, exceto os vazios.
      /E           Copia diret¢rios e subdiret¢rios, inclusive os vazios.
                   O mesmo que /S /E. Pode ser usado para modificar /T.
      /V           Verifica o tamanho de cada novo arquivo.
      /W           Solicita que vocˆ pressione uma tecla antes de copiar.
      /C           Continua copiando, mesmo que ocorram erros.
      /I           Se o destino nÆo existir e mais de um arquivo estiver sendo
                   copiado, pressupäe que o destino deve ser um diret¢rio.
      /Q           NÆo exibe os nomes de arquivos ao copiar.
      /F           Exibe os nomes de arquivos de origem e de destino completos ao
                   copiar.
      /L           Exibe arquivos que seriam copiados.
      /G           Permite a c¢pia de arquivos criptografados para um destino que
                   nÆo oferece suporte a criptografia.
      /H           Copia arquivos ocultos e do sistema tamb‚m.
      /R           Substitui arquivos somente leitura.
      /T           Cria a estrutura de diret¢rios, mas nÆo copia arquivos. NÆo
                   inclui diret¢rios ou subdiret¢rios vazios. /T /E inclui
                   diret¢rios e subdiret¢rios vazios.
      /U           Copia apenas os arquivos que j  existem no destino.
      /K           Copia atributos. O Xcopy normal redefinir  os atributos
                   somente leitura.
      /N           Copia usando os nomes curtos gerados.
      /O           Copia as informa‡äes de ACL e propriet rio do arquivo.
      /X           Copia configura‡äes de auditoria de arquivo (implica /O).
      /Y           Suprime o prompt para vocˆ confirmar se deseja substituir
                   um arquivo de destino existente.
      /-Y          Exibe o prompt para vocˆ confirmar se deseja substituir
                   um arquivo de destino existente.
      /Z           Copia arquivos de rede no modo reinici vel.
      /B           Copia o pr¢prio V¡nculo Simb¢lico, e nÆo o destino do v¡nculo.
      /J           Copia usando E/S sem buffer. Recomend vel para arquivos muito
                   grandes.

    A op‡Æo /Y pode ser predefinida na vari vel de ambiente COPYCMD.
    Isso pode ser anulado por /-Y na linha de comando.



    Qualquer duvida poste ae...

    []s,




    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    • Marcado como Resposta Ranisses quarta-feira, 2 de dezembro de 2009 11:34
    sábado, 21 de novembro de 2009 15:24

Todas as Respostas

  • Ranisses, boa tarde.
    Vc tem necessidade de ser um script ?  Existem programas gratuitos que efetuam tal verificação e criam logs.
    É o caso do EveryDay.

    Qual é sua real necessidade?

    []s,

    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    sexta-feira, 20 de novembro de 2009 19:54
  • Oi Marcellus.
    Kra estou precisando do seguinte... tenho um executavel que preciso atualizar em alguns computadores da empresa, sempre que sair uma nova versão. Por isso pensei no script, verificando a data dos arquivos nas estações com a data do arquivo no servidor, e se este for mais novo então copia para as estações.

    Se tiver outro jeito, aceito sugestões.

    sds,
    Ranisses A. Corona

    sábado, 21 de novembro de 2009 14:13
  • Oi Marcellus.
    Kra estou precisando do seguinte... tenho um executavel que preciso atualizar em alguns computadores da empresa, sempre que sair uma nova versão. Por isso pensei no script, verificando a data dos arquivos nas estações com a data do arquivo no servidor, e se este for mais novo então copia para as estações.

    Se tiver outro jeito, aceito sugestões.

    sds,
    Ranisses A. Corona


    Ranisses, boa tarde.

    Existem algumas formas.

    1 - É um arquivo de ERP? Ele teria como ao invez de ser copiado ser inserido apenas um Atalho?

    2 - Vbs, seu script de logon é VBS?  Se sim pode usar um modelo parecido com esse:

    Set objNetwork = CreateObject("Wscript.Network")
    Set strFolder = CreateObject("Scripting.FileSystemObject")

    strOrigem = "\\servidor\pasta\arquivo"
    strCaminho =  "c:\Documents and Settings\All Users\Desktop"

    If strFolder.FolderExists (strCaminho) = False Then
       strFolder.CreateFolder (strCaminho)
       copiaArquivo strOrigem,strCaminho
    Else
       copiaArquivo strOrigem,strCaminho
    End If

    Sub CopiaArquivo(origem,Destino)

    strFolder.CopyFile origem , destino & "\" , true

    End Sub

    3 - Seu script de logon é batch file (.bat) ? Se sim pode usar o proprio xCopy do windows. 

    Copia arquivos e  arvores de diretorios.

    XCOPY origem [destino] [/A | /M] [/D[:data]] [/P] [/S [/E]] [/V] [/W]
                               [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                               [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                               [/EXCLUDE:arquivo1[+arquivo2][+arquivo3]...]

      origem       Especifica o(s) arquivo(s) a ser(em) copiado(s).
      destino  Especifica o local e/ou o nome dos novos arquivos.
      /A           Copia somente arquivos com o atributo de arquivamento
                   definido; nÆo altera o atributo.
      /M           Copia somente arquivos com o atributo de arquivamento
                   definido; desativa o atributo de arquivamento.
      /D:m-d-a     Copia os arquivos alterados durante ou ap¢s a data
                   especificada. Se nÆo for definida uma data, copia apenas os
                   arquivos cujo tempo de origem seja mais novo do que o tempo
                   de destino.
      /EXCLUDE:arquivo1[+arquivo2][+arquivo3]...
                   Especifica uma lista de arquivos contendo cadeias de
                   caracteres. Cada cadeia deve estar em uma linha separada nos
                   arquivos. Quando qualquer cadeia corresponder a qualquer parte
                   do caminho absoluto do arquivo a ser copiado, esse arquivo
                   deixar  de ser copiado. Por exemplo, especificar uma cadeia de
                   caracteres como \obj\ ou .obj excluir  todos os arquivos sob o
                   diret¢rio obj ou com a extensÆo .obj, respectivamente.
      /P           Solicita confirma‡Æo antes de criar cada arquivo de destino.
      /S           Copia diret¢rios e subdiret¢rios, exceto os vazios.
      /E           Copia diret¢rios e subdiret¢rios, inclusive os vazios.
                   O mesmo que /S /E. Pode ser usado para modificar /T.
      /V           Verifica o tamanho de cada novo arquivo.
      /W           Solicita que vocˆ pressione uma tecla antes de copiar.
      /C           Continua copiando, mesmo que ocorram erros.
      /I           Se o destino nÆo existir e mais de um arquivo estiver sendo
                   copiado, pressupäe que o destino deve ser um diret¢rio.
      /Q           NÆo exibe os nomes de arquivos ao copiar.
      /F           Exibe os nomes de arquivos de origem e de destino completos ao
                   copiar.
      /L           Exibe arquivos que seriam copiados.
      /G           Permite a c¢pia de arquivos criptografados para um destino que
                   nÆo oferece suporte a criptografia.
      /H           Copia arquivos ocultos e do sistema tamb‚m.
      /R           Substitui arquivos somente leitura.
      /T           Cria a estrutura de diret¢rios, mas nÆo copia arquivos. NÆo
                   inclui diret¢rios ou subdiret¢rios vazios. /T /E inclui
                   diret¢rios e subdiret¢rios vazios.
      /U           Copia apenas os arquivos que j  existem no destino.
      /K           Copia atributos. O Xcopy normal redefinir  os atributos
                   somente leitura.
      /N           Copia usando os nomes curtos gerados.
      /O           Copia as informa‡äes de ACL e propriet rio do arquivo.
      /X           Copia configura‡äes de auditoria de arquivo (implica /O).
      /Y           Suprime o prompt para vocˆ confirmar se deseja substituir
                   um arquivo de destino existente.
      /-Y          Exibe o prompt para vocˆ confirmar se deseja substituir
                   um arquivo de destino existente.
      /Z           Copia arquivos de rede no modo reinici vel.
      /B           Copia o pr¢prio V¡nculo Simb¢lico, e nÆo o destino do v¡nculo.
      /J           Copia usando E/S sem buffer. Recomend vel para arquivos muito
                   grandes.

    A op‡Æo /Y pode ser predefinida na vari vel de ambiente COPYCMD.
    Isso pode ser anulado por /-Y na linha de comando.



    Qualquer duvida poste ae...

    []s,




    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    • Marcado como Resposta Ranisses quarta-feira, 2 de dezembro de 2009 11:34
    sábado, 21 de novembro de 2009 15:24
  • Olá,

    Verifique o exemplo abaixo:



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

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

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


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


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

    ChecaArquivo strPasta

    wscript.echo "Fim do Script"
    wscript.quit


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)
    GeraLog strSubPasta

    For each subFolder in Folder.SubFolders
       GeraLog SubFolder.Path
       LimpaDel SubFolder.path
       ChecaArquivo SubFolder.path

    Next

    End sub



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

    Sub GeraLog(strCaminho)


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

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       strFileDest = strDest & MID(MyFiles.path,Len(strPasta),Len(Myfiles.path))

       if (objFSO.FileExists(strFileDest) = True) Then
          Set objFileDest = objFSO.GetFile(strFileDest)
          If myfiles.DateLastModified > objFileDest.DateLastModified  Then
             objFSO.Copyfile strFileOrig,strFileDest,True
             objLogFile.WriteLine "ARQUIVO SUBSTITUIDO : "  & myfiles.name &  " copiado em : " & Now
          End if
       Else
          pastapai = MID(RIGHT(myFiles.ParentFolder,LEN(myFiles.ParentFolder)),Len(strPasta),Len(myFiles.ParentFolder))
          dirDest = strDest
          arrTipos = split(pastapai,"\")
          For x = 0 to UBOUND(arrTipos)
             if objFSO.folderexists(dirDest & arrTipos(x)) = false Then
               objFSO.CreateFolder(dirDest & arrTipos(x))
               dirDest = dirDest & arrTipos(x) & "\"
             Else
               dirDest = dirDest & arrTipos(x) & "\"
             End if
          Next

          objFSO.Copyfile strFileOrig,strFileDest,True
          objLogFile.WriteLine "ARQUIVO NOVO : "  & dirDest & myfiles.name &  " copiado em : " & Now
       End if
    Next
    End sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Ranisses quarta-feira, 2 de dezembro de 2009 11:34
    • Não Marcado como Resposta Ranisses quarta-feira, 2 de dezembro de 2009 11:36
    segunda-feira, 23 de novembro de 2009 10:37
  • Ok galera,
    Obrigado pelas dicas e ajuda.

    Acabei fazendo através de um .bat utilizando o comando XCOPY.

    sds,
    Ranisses A. Corona

    quarta-feira, 2 de dezembro de 2009 11:36
  • Muito bom. usei e ficou legal. so nao consegui fazer tudo que queria:

    PRECISO LER UM ARQUIVO DE TEXTO COM UMA RELAÇÃO DE NOMES DE COMPUTADORES E VERIFICAR UM CERTO ARQUIVO EXECUTQAVEL EM CADA UM, SE NAO TIVER ATUALIZADO SUBSTITUIR... SENDO QUE TEM MAIS DE UM CAMINHO PARA O ARQUIVO INSTALADO NAS MAQUINAS E PODE SER USADO NO XP OU NO SEVEN... DEU UM ERRO QUANDO TENTEI... VC SABE RESOLVER?

    quinta-feira, 17 de maio de 2012 23:47
  • Boa noite,

    eu tenho esse script aqui que olha a extenção e a daata de modificação.. ve se serve 

    ' use a default source path or get one from the command line parameters
    dim sourcepath: sourcepath = "c:\LOGS\"
    if WScript.Arguments.Named.Exists("source") then
        sourcepath = WScript.Arguments.Named("source")
    end if

    ' use a default destination path or get one from the command line
    dim destinationpath: destinationpath = "c:\LOGS\Log antigo\"
    if WScript.Arguments.Named.Exists("destination") then
        destinationpath = WScript.Arguments.Named("destination")
    end if

    function PegaDataArquivo(filespec)
       Dim fso, f, data
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.GetFile(filespec)
       data = UCase(filespec) & "<BR>"
       data = f.DateLastModified

       PegaDataArquivo = DatePart("yyyy",data) & DatePart("m", data) & DatePart("d", data)
    End Function

    Function DataAtual()
         dteCurrent = Date() - Day(4)

         dteDay = Day(dteCurrent)
         dteMonth = Month(dteCurrent)
         dteYear = Year(dteCurrent)

         DataAtual = dteYear & dteMonth & dteDay
    End Function


    'atribui a pasta de entrada
    dim fso: set fso = CreateObject("Scripting.FileSystemObject")
    dim sourcefolder: set sourcefolder = fso.GetFolder(sourcepath)

    if not fso.FolderExists(destinationpath) then
        'se o diretorio de destino não existir trata o erro e cria ele
         err.raise 1,,destinationpath & " not found"
    end if

    'faz um loop para pegar todos os arquivos do diretório
    dim ext, data, file, count: count = 0

    for each file in sourcefolder.Files
        if (file <> "") then
           ext = fso.GetExtensionName(file.name)
           if ext = "txt" then
              if PegaDataArquivo(file) <= DataAtual() then    
                 file.Move destinationpath
              end if
           end if
        end if
    next

    quarta-feira, 21 de maio de 2014 02:18
  • esse ai pega os arquivos com data de modificação 3 dias pra tras da tada atual ou seja, arquivos que foram criados no dia 17/05/2014 ou anteriores a essa data são movidos para a pasta de log-antigo hoje estamos na data de 20/05/2014
    quarta-feira, 21 de maio de 2014 02:21
  • Boa tarde Prezados,

    A quem ainda interessar, segue o comando:

    Robocopy Origem Destino Arquivo /xo /z /w:10

    /xo > exclui o arquivo mais antigo;

    /z > modo reinicializavel;

    /w:10: no caso de falta de comunicação do destino com a origem, aguardara 10 segundos antes de tentar a cópia novamente;

    Qualquer dúvida estou a disposição! Abraços a todos!

    segunda-feira, 23 de maio de 2016 15:35
  • Boa tarde,

    Eu estou precisando de um script VBA para copiar arquivos e pastas diretamente da "Nuvem" para meu Notebook. Alguém possui esse conhecimento?

    Utilizo o Office 2016 Plus, 64 bits

    Nuvem: OneDrive

    quarta-feira, 11 de abril de 2018 18:14