none
Mover arquivos RRS feed

  • Pergunta

  • Galera,

    Desculpe a pergunta, eu procurei aqui no forum alguma duvida parecida com a minha e realmente não encontrei.

    Tenho a seguinte estrutura no meu servidor, a pasta Atualização (Principal) e as Versões (Subdiretórios, e suas respectivas datas de modificação).

    'D:\Atualização\

    Versao01 - 01/01/2013

    Versao02 - 01/02/2013

    Versao03 - 01/03/2013

    E assim vai, são pastas com as novas atualizações, que geralmente são lançadas no começo de cada mes.

    Eu pretendo criar uma bat/script que procure na pasta Atualização, na pasta Versão mais recente, o arquivo com a extensão X, e mova para a pasta no pc do usuario.

    Soluções encontradas:

    xcopy - Sendo que não encontrei o parametro no xcopy para procurar o arquivo nos subdiretorios, e o parametro /D só atende a partir da data estipulada por mim, e não a ultima data de modificação.

    Script - Algo 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
    Alguem poderia me dar uma luz nessa duvida ?


    Fico grato.


    Vitor




    • Editado Fábio JrModerator quinta-feira, 21 de fevereiro de 2013 16:14 Retirada formatação html
    quinta-feira, 21 de fevereiro de 2013 15:47

Respostas

  • Com esses parametros nem precisar usar o SORT

    @echo off
    
    SET PASTA_ATUALIZACAO=D:\Atualização
    
    dir %PASTA_ATUALIZACAO% /b /O:-D > %temp%\versoes.tmp
    
    set /p UltimaVersao=<%temp%\versoes.tmp
    echo %UltimaVersao%
    
    robocopy %PASTA_ATUALIZACAO%\%UltimaVersao% C:\pastadoprograma 


    Fábio de Paula Junior

    quinta-feira, 21 de fevereiro de 2013 19:36
    Moderador

Todas as Respostas

  • Vitor,

    Dá pra consertar seu .VBS, vc teria que criar um script que lê todas as pasta e confira o nome ou data de criação para saber qual é a mais antiga, dá um pouco de trabalho.

    Experimente este .BAT, ele vai pegar a pasta pela ordem alfabética reversa (Versão 03 seria então o topo da lista), só tem que conferir se o robocopy está copiando o que se deve copiar (acerte o nome da pasta de destino), testa aí.

    @echo off
    
    SET PASTA_ATUALIZACAO=D:\Atualização
    
    dir %PASTA_ATUALIZACAO% /b | sort /r > %temp%\versoes.tmp
    
    set /p UltimaVersao=<%temp%\versoes.tmp
    echo %UltimaVersao%
    
    robocopy %PASTA_ATUALIZACAO%\%UltimaVersao% C:\pastadoprograma 


    Fábio de Paula Junior

    quinta-feira, 21 de fevereiro de 2013 16:24
    Moderador
  • Fabio,

    Obrigado pela ajuda, adaptei a bat para a minha estrutura.

    Ficou assim:

    @echo off

    SET PASTA_ATUALIZACAO=\\DMAD01\Docs\DMup\WiseIT\versoes\AmbienteConfig

    dir %PASTA_ATUALIZACAO% /b | sort /r > %temp%\AmbienteCCenterConfigEAR_mssql.ear

    set /p UltimaVersao=<%temp%\AmbienteCCenterConfigEAR_mssql.ear
    echo %UltimaVersao%

    robocopy %PASTA_ATUALIZACAO%\%UltimaVersao% D:\Teste 

    -------------------------------------////-------------------------------------

    \\DMAD01\Docs\DMup\WiseIT\versoes\AmbienteConfig -> Diretorio principal , dentro existem as pastas das versoes e as respectivas datas de modificação "v7_9_1  (22/11/2012),   v7_10_1  (13/12/2012),   v7_12_1  (04/02/2013).

    AmbienteCCenterConfigEAR_mssql.ear -> Arquivo que eu desejo mover (  Sempre com o mesmo nome e com a mesma extensão, só muda a pasta da versão ).

    Resultado:

    Ele moveu o arquivo AmbienteCCenterConfigEAR_mssql.ear da pasta v7_9_1 do dia 22/11/2012, e não a mais recente da pasta 04/02/2013.

    Pode me informar o que eu mudo no script para ele retornar o arquivo com a pasta da versao mais recente ?

    Abs

    Vitor


    quinta-feira, 21 de fevereiro de 2013 17:01
  • Vitor,

    Eu fiz baseado na list que vc havia passado.

    O script pega sempre o primeiro nome da lista gerado pelo comando:

    dir %PASTA_ATUALIZACAO% /b | sort /r

    Ele segue a ordem alfabética e talvez sua estrutura não funcione bem com ordem alfabética, talvez se vc alterar o nome da pata v7_9_1 para v7_09_1 ela funcione. Se isto não for possivel então volte para o .VBS.

    Aqui tem um exemplo para trazer o arquivo mais recente, não deve ser dificil para adaptar para Pasta, se eu estive com tempo eu faria pra vc.

    Using VBScript to find most recent file date in a single folder

    http://stackoverflow.com/questions/9205137/using-vbscript-to-find-most-recent-file-date-in-a-single-folder


    Fábio de Paula Junior

    quinta-feira, 21 de fevereiro de 2013 17:09
    Moderador
  • Pode tentar algumas opções do DIR também,exemplo:

    dir c:\temp /b /ad-h /o-d


    Fábio de Paula Junior

    quinta-feira, 21 de fevereiro de 2013 17:11
    Moderador
  • Ok Fabio,

    Obrigado pela ajuda, vou tentar modificar o meu arquivo .bat

    Abs

    Vitor Sampaio

    quinta-feira, 21 de fevereiro de 2013 17:59
  • Com esses parametros nem precisar usar o SORT

    @echo off
    
    SET PASTA_ATUALIZACAO=D:\Atualização
    
    dir %PASTA_ATUALIZACAO% /b /O:-D > %temp%\versoes.tmp
    
    set /p UltimaVersao=<%temp%\versoes.tmp
    echo %UltimaVersao%
    
    robocopy %PASTA_ATUALIZACAO%\%UltimaVersao% C:\pastadoprograma 


    Fábio de Paula Junior

    quinta-feira, 21 de fevereiro de 2013 19:36
    Moderador