none
Script VBS ou Bat RRS feed

  • Pergunta

  • Ola 

    Estou precisando de um script para copiar determinados arquivos dentro de uma pasta para outra na rede.

    Não sou muito familiarizado com scripts.

    os arquivos sao:

    CGX175D_ORGAO “data”.TXT ;TADMS “data”.TXT ; CGX175D_UO “data”.TXT ; CGX175D_UG “data”.TXT ; CGX175D_FONTE “data”.TXT ; CGX175D_ND “data”.TXT ; CGX175D_PT “data”.TXT ;REP “data”.TXT ; CGX175D_MUN “data”.TXT ;CGX175D_PTRES “data”.TXT........

    Preciso que seja feita uma verificação dos arquivos ( porque dentro da pasta existe outros arquivos), depois seja feita uma copia para o destino aonde poderá sobrescrever os arquivos com data do dia anterior.

    Não sei se precisa setar conta de usuário para o serviço..

    Desde já agradeço

    quinta-feira, 2 de janeiro de 2014 18:21

Respostas

  • Boa noie Valdo,

    só para entendimento, no caso vc quer que todos os arquivos que começam com "CGX175D_xx_0000.txt" seja encaminhado para uma outra pasta subescevendo o arquivo, certo?

    algo parecido com o desse post, só que ao inves de apagar copia o arquivo...

    bom fiz algo nesse sentido, mas como vc não especificou como é o formatado da data, fiz um que copia os arquivos com a diferença entre a data de modificação do arquivo com a data atual, e depois faz o mesmo para a pasta de destino....

    veja se te ajuda...

    PS: sempre faça um teste a parte antes de fazer um teste em "Produção".
    copie o Cod em um Notepad e salve com a extensão .vbs (ex.CopiadeArquivos.vbs)

    set oFSo = CreateObject("Scripting.FileSystemObject")
    
    sPastaOri ="\\servidor\pasta de Origem"
    sPastaDest ="\\servidor\pasta de destino"
    '***Verifica se a pasta de origem e destino existem'
    If not oFSo.FolderExists(sPastaOri &"\") Then
    	Wscript.echo "O Caminho de Origem [" & sPastaOri & "] não existe.."
    	wscript.quit
    End If
    If not oFSo.FolderExists(sPastaDest &"\") Then
    	Wscript.echo "O Caminho de Destino [" & sPastaDest &"\" & "] não existe.."
    	wscript.quit
    End If
    
    Copiar_Arquivos(sPastaOri &"\") 'Execução da rotina abaixo
    
    '***Rotina para verificar as pastas e Subpastas para efetuar a copia'
    Sub Copiar_Arquivos(Pasta)
    Set folder = oFSo.getFolder(Pasta)
    	If folder.Subfolders.count > 0 Then
    		For Each SubFolder in folder.Subfolders
    			Copiar_Arquivos SubFolder
    		Next
    	End If
    	For Each file in folder.files
    		If (dateDiff("D", file.DateLastModified, now) > 1) Then 'Aqui compara a	ulma data de modificação com a data atual
    			Set objFile = oFSo.GetFile(file)
    			'Aqui identifica se o nome do arquivo tem a palavra desejada
    			If InStr(ucase(File.name),"CGX175D") <> 0 Or InStr(ucase(File.name),"TADMS") <> 0 Then
    				oFSo.CopyFile File, sPastaDest &"\",True 'Aqui efetua a copia e subescreve
    			End If
    		End If
    	Next
    End Sub
    
    sArquivoAntigo = msgbox("Deseja apagar os Arquivos com mais de 1 dia de Modificação?",36,"Copia Arquivos")
    
    If sArquivoAntigo = Vbno Then
    	wscript.echo "Finalizado, sem deletar arquivos antigo da pasta de destino"
    	wscript.quit
    Else
    	'**** Verifica se na pasta de destino existe arquivos com mais de um dia de modificação.'
    	Set Folder = oFSo.getFolder(sPastaDest &"\")
    		For Each file in folder.files
    			If (dateDiff("D", file.DateLastModified, now) > 1) Then
    				file.delete true
    			End If
    		Next
    	wscript.echo "Finalizado!"
    End If
    
    


    att, Aparecido Deveza


    • Editado Fábio JrModerator sexta-feira, 3 de janeiro de 2014 16:49 Formato do código
    • Sugerido como Resposta Edinaldo Junior segunda-feira, 6 de janeiro de 2014 18:10
    • Marcado como Resposta Valdo Scarin quinta-feira, 9 de janeiro de 2014 22:34
    sexta-feira, 3 de janeiro de 2014 01:12

Todas as Respostas

  • Boa noie Valdo,

    só para entendimento, no caso vc quer que todos os arquivos que começam com "CGX175D_xx_0000.txt" seja encaminhado para uma outra pasta subescevendo o arquivo, certo?

    algo parecido com o desse post, só que ao inves de apagar copia o arquivo...

    bom fiz algo nesse sentido, mas como vc não especificou como é o formatado da data, fiz um que copia os arquivos com a diferença entre a data de modificação do arquivo com a data atual, e depois faz o mesmo para a pasta de destino....

    veja se te ajuda...

    PS: sempre faça um teste a parte antes de fazer um teste em "Produção".
    copie o Cod em um Notepad e salve com a extensão .vbs (ex.CopiadeArquivos.vbs)

    set oFSo = CreateObject("Scripting.FileSystemObject")
    
    sPastaOri ="\\servidor\pasta de Origem"
    sPastaDest ="\\servidor\pasta de destino"
    '***Verifica se a pasta de origem e destino existem'
    If not oFSo.FolderExists(sPastaOri &"\") Then
    	Wscript.echo "O Caminho de Origem [" & sPastaOri & "] não existe.."
    	wscript.quit
    End If
    If not oFSo.FolderExists(sPastaDest &"\") Then
    	Wscript.echo "O Caminho de Destino [" & sPastaDest &"\" & "] não existe.."
    	wscript.quit
    End If
    
    Copiar_Arquivos(sPastaOri &"\") 'Execução da rotina abaixo
    
    '***Rotina para verificar as pastas e Subpastas para efetuar a copia'
    Sub Copiar_Arquivos(Pasta)
    Set folder = oFSo.getFolder(Pasta)
    	If folder.Subfolders.count > 0 Then
    		For Each SubFolder in folder.Subfolders
    			Copiar_Arquivos SubFolder
    		Next
    	End If
    	For Each file in folder.files
    		If (dateDiff("D", file.DateLastModified, now) > 1) Then 'Aqui compara a	ulma data de modificação com a data atual
    			Set objFile = oFSo.GetFile(file)
    			'Aqui identifica se o nome do arquivo tem a palavra desejada
    			If InStr(ucase(File.name),"CGX175D") <> 0 Or InStr(ucase(File.name),"TADMS") <> 0 Then
    				oFSo.CopyFile File, sPastaDest &"\",True 'Aqui efetua a copia e subescreve
    			End If
    		End If
    	Next
    End Sub
    
    sArquivoAntigo = msgbox("Deseja apagar os Arquivos com mais de 1 dia de Modificação?",36,"Copia Arquivos")
    
    If sArquivoAntigo = Vbno Then
    	wscript.echo "Finalizado, sem deletar arquivos antigo da pasta de destino"
    	wscript.quit
    Else
    	'**** Verifica se na pasta de destino existe arquivos com mais de um dia de modificação.'
    	Set Folder = oFSo.getFolder(sPastaDest &"\")
    		For Each file in folder.files
    			If (dateDiff("D", file.DateLastModified, now) > 1) Then
    				file.delete true
    			End If
    		Next
    	wscript.echo "Finalizado!"
    End If
    
    


    att, Aparecido Deveza


    • Editado Fábio JrModerator sexta-feira, 3 de janeiro de 2014 16:49 Formato do código
    • Sugerido como Resposta Edinaldo Junior segunda-feira, 6 de janeiro de 2014 18:10
    • Marcado como Resposta Valdo Scarin quinta-feira, 9 de janeiro de 2014 22:34
    sexta-feira, 3 de janeiro de 2014 01:12
  • Valdo,

    Veja dois exemplos para copiar todos os TXTs e LOGs de uma pasta (de C:\temp para C:\temp\2).

    PowerShell

    get-childitem "c:\temp\*" -include @("*.txt","*.log") | 
        %{copy-item $_ "c:\temp\2"}

    Batch

    forfiles /P c:\temp /M *.txt /C "cmd /c copy @file c:\temp\2"
    forfiles /P c:\temp /M *.LOG /C "cmd /c copy @file c:\temp\2"

    Basta você adaptar para a sua necessidade.


    Fábio de Paula Junior

    • Sugerido como Resposta Edinaldo Junior segunda-feira, 6 de janeiro de 2014 18:10
    sexta-feira, 3 de janeiro de 2014 15:46
    Moderador
  • Obrigado pela ajuda

    nesse script eu não preciso setar o usuário que ira rodar?? Quero automatizar via control-m...

    Um usuário que tenha permissão de escrita..... 

    segunda-feira, 6 de janeiro de 2014 18:08
  • Meu amigo eu não posso copiar todos os arquivos ... são os especificos
    segunda-feira, 6 de janeiro de 2014 18:09
  • O script nao pode ter interação com o usuário.

    Fiz um teste aqui.. nao sei se coloquei certo os nomes dos arquivos... mas ele não esta copiando.

    Eu coloquei nessa parte.

    Set objFile = oFSo.GetFile(file) 'Aqui identifica se o nome do arquivo tem a palavra desejada If InStr(ucase(File.name),"CGX175D") <> 0 Or InStr(ucase(File.name),"TADMS") <> 0 Then oFSo.CopyFile File, sPastaDest &"\",True 'Aqui efetua a copia e subescreve

    tem que mudar o get fiile(file) eu coloquei o arquivo teste. embaixo aonde esta o cgs175d eu troquei e coloquei teste e coloquei

    o arquivo dentro da pasta e nao funcionou.

    segunda-feira, 6 de janeiro de 2014 18:33
  • A variavel data faz parte do nome do arquivo... dd.mm.yy
    segunda-feira, 6 de janeiro de 2014 18:36
  • Quanto ao usuário, basta você colocar as permissões que você necessita e agendar a tarefa no Agendador de Tarefas.

    Quanto a copiar apenas os arquivos especificos, é como eu já disse: Basta você adaptar para a sua necessidade.

    Exemplo

    forfiles /P c:\temp /M CGX175D_ORGAO*.TXT /C "cmd /c copy @file c:\temp\2"

    Esse resolve apenas o primeiro, você tem que fazer os demais.


    Fábio de Paula Junior

    • Sugerido como Resposta Edinaldo Junior segunda-feira, 6 de janeiro de 2014 18:40
    segunda-feira, 6 de janeiro de 2014 18:36
    Moderador
  • Boa Noite Valdo,

    acima dessa linha que vc cita, existe a seguinte decisão : 

    If (dateDiff("D", file.DateLastModified, now) > 1) 

    ou seja, o dateDiff  compara a data da ultima modificação do arquivo com a data atual e se for maior que 1 dia ele faz a copia do arquivo, mas se vc salvou um arquivo na pasta destino, pode haver alteração nessa decisão e por isso ele não copia.

    Se vc preferir pode utilizara data de criação do arquivo:

    If (dateDiff("D", file.DateCreated, now) > 1) 


    Segue a sintaxe de DateLastModified Property




    att, Aparecido Deveza

    segunda-feira, 6 de janeiro de 2014 23:55