none
.VBS para atualizar todos os arquivos do ERP interno RRS feed

  • Pergunta

  • Saudações, Mestres!

    Preciso de uma ajuda de vocês, apesar de ter conhecimento com script .bat não tenho conhecimento algum e não entendo a linguagem VBS.

    Hoje tenho um script .BAT que preciso que seja .VBS, esse script roda quando o usuário faz o logon na estação de trabalho, ele finaliza o explorer para que o usuário não use o sistema e na sequência atualiza o executável e todos os seus arquivos .ddl entre outros de diversas extensões, preciso de um script .vbs que faça essa função, ou seja, que finalize o windows explorer durante a atualização e que possa sobrescrever todos os arquivos do sistema sem perguntar se é para substituir, se possível checar antes se os arquivos de origem já estão atualizados no destino e se já estiver informar em tela que o sistema já está atualizado.

    Hoje uso o .BAT abaixo, porém não retorna nenhuma mensagem e se o usuário reiniciar o PC ou fazer logon ela roda novamente a atualização.

    @echo
    taskkill /IM explorer.exe -f
    cd c:\
    copy \\MEUSERVIDOR\INSTALADORES\Atualizacoes\2017\04\Exec_10_04_17 "C:\ERP\12.2" /y
    start explorer.exe
    exit

    Se alguém conseguir me ajudar com essa tarefa agradeço imensamente,

    Fernando

    quarta-feira, 12 de abril de 2017 11:51

Respostas

  • Fernando,

    Segue exemplo feito em VBS

    Set Shell = WScript.CreateObject("WScript.Shell")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    Set colProcesses = objWMIService.ExecQuery _
         ("Select * from Win32_Process Where Name = 'iexplore.exe'")
         
    For each Processo in ColProcesses
        Processo.Terminate()
    Next
    
    strCaminho = "origem"
    strDestino = "destino"
    
    Dim fso
    Set fso = WScript.CreateObject("Scripting.Filesystemobject")
    
    If (fso.FolderExists(strCaminho) = True) Then
       Set Folder = fso.GetFolder(strCaminho)
    		fso.CopyFolder  strCaminho, strDestino & "\", true
    End if
    
    
    Shell.Run("iexplore.exe")
    
    
    Set Shell = Nothing
    Set fso = Nothing
    
    wscript.quit

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
    quarta-feira, 12 de abril de 2017 14:11
  • Fernando,

    Se você precisar executar comandos do prompt dento do VBS, vc pode usar o seguinte comando

    Dim oShell
    
    Set oShell = CreateObject("WScript.Shell")
    
    oShell.Run "taskkill /IM explorer.exe -f"
    

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
    quarta-feira, 12 de abril de 2017 14:25
  • Carlos, Boa Tarde.

    Funcionou, porém quando tento executar novamente ele dá um erro de permissão negado, coloquei o Script da seguinte forma, tirei a opção de finalizar o explorer, pois não estava inciando.


    Set Shell = WScript.CreateObject("WScript.Shell")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

    strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2"
    strDestino = "C:\Apolo\"

    Dim fso
    Set fso = WScript.CreateObject("Scripting.Filesystemobject")
    If (fso.FolderExists(strCaminho) = True) Then
       Set Folder = fso.GetFolder(strCaminho)
            fso.CopyFolder  strCaminho, strDestino & "\", True

    End if

    Set Shell = Nothing
    Set fso = Nothing

    wscript.quit

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
    quarta-feira, 12 de abril de 2017 17:23
  • Faz um teste removendo o true
             fso.CopyFolder  strCaminho, strDestino & "\"

    • Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 11:06
    quinta-feira, 13 de abril de 2017 20:14

Todas as Respostas

  • Fernando,

    Segue exemplo feito em VBS

    Set Shell = WScript.CreateObject("WScript.Shell")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    Set colProcesses = objWMIService.ExecQuery _
         ("Select * from Win32_Process Where Name = 'iexplore.exe'")
         
    For each Processo in ColProcesses
        Processo.Terminate()
    Next
    
    strCaminho = "origem"
    strDestino = "destino"
    
    Dim fso
    Set fso = WScript.CreateObject("Scripting.Filesystemobject")
    
    If (fso.FolderExists(strCaminho) = True) Then
       Set Folder = fso.GetFolder(strCaminho)
    		fso.CopyFolder  strCaminho, strDestino & "\", true
    End if
    
    
    Shell.Run("iexplore.exe")
    
    
    Set Shell = Nothing
    Set fso = Nothing
    
    wscript.quit

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
    quarta-feira, 12 de abril de 2017 14:11
  • Fernando,

    Se você precisar executar comandos do prompt dento do VBS, vc pode usar o seguinte comando

    Dim oShell
    
    Set oShell = CreateObject("WScript.Shell")
    
    oShell.Run "taskkill /IM explorer.exe -f"
    

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
    quarta-feira, 12 de abril de 2017 14:25
  • Carlos, Boa Tarde.

    Funcionou, porém quando tento executar novamente ele dá um erro de permissão negado, coloquei o Script da seguinte forma, tirei a opção de finalizar o explorer, pois não estava inciando.


    Set Shell = WScript.CreateObject("WScript.Shell")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

    strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2"
    strDestino = "C:\Apolo\"

    Dim fso
    Set fso = WScript.CreateObject("Scripting.Filesystemobject")
    If (fso.FolderExists(strCaminho) = True) Then
       Set Folder = fso.GetFolder(strCaminho)
            fso.CopyFolder  strCaminho, strDestino & "\", True

    End if

    Set Shell = Nothing
    Set fso = Nothing

    wscript.quit

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
    quarta-feira, 12 de abril de 2017 17:23
  • O comando funcionou, mas após o termino da substituição dos arquivos o explorer.exe tem que iniciar e não está iniciando.
    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
    • Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
    quarta-feira, 12 de abril de 2017 17:24
  • Colocar o comando oShell.Run "start explorer.exe" depois end if.
    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
    • Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
    quarta-feira, 12 de abril de 2017 17:45
  • Desculpa, me explica novamente a necessidade vou tentar modificar
    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:51
    • Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
    quarta-feira, 12 de abril de 2017 17:48
  • Me desculpe, devo ter me expressado errado, os arquivos e pastas que então no destino devem ser substituídos pelos arquivos e pastas que estão na origem, pois eles já existem, como trata-se de uma atualização preciso sobrescrever os arquivos já existentes.
    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:51
    • Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
    quarta-feira, 12 de abril de 2017 18:17
  • Fernando,

    Conseguiu modificar o script para atender sua necessidade? Caso precise de ajuda não deixei de postar sua duvida.

    Abr,

    • Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 20:00
    • Não Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 20:00
    quinta-feira, 13 de abril de 2017 19:57
  • Carlos,

    Ainda não consegui, estava dando uma pesquisada agora, como trata-se de uma atualização preciso sobrescrever os arquivos já existentes, quando a pasta não existe ele copia perfeitamente, mas quando existe dá um erro de acesso negado e não sobrescreve os arquivos.

    quinta-feira, 13 de abril de 2017 20:01
  • Será que o sistema operacional esta usando os arquivos?

    podemos colocar um função para apagar os arquivos depois copia-los 

    quinta-feira, 13 de abril de 2017 20:04
  • Não está em uso pois estou testando com meu usuário por enquanto, e o sistema está fechado, manualmente se vou na pasta deleta normalmente, mas não posso deletar os arquivos existentes, somente sobrescrever por outros atuais.
    quinta-feira, 13 de abril de 2017 20:08
  • Faz um teste removendo o true
             fso.CopyFolder  strCaminho, strDestino & "\"

    • Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 11:06
    quinta-feira, 13 de abril de 2017 20:14
  • Este erro provavelmente é de permissão

    se possível olha este link, mostra como usar o copyFolder

    https://msdn.microsoft.com/PT-BR/library/office/gg264819.aspx

    Na pasta C:\Apolo\ verifica se possui acesso para modificar

     

    quinta-feira, 13 de abril de 2017 20:32
  • Carlos, Bom dia.

    O Script funcionou perfeitamente, porém o erro que estava dando era realmente de permissão, ocorre que a instalação do sistema é no "C:\" e todas as vezes que crio a pasta por padrão ela fica somente como leitura, mesmo desabilitando nas propriedades dela para que não seja somente leitura, após reiniciar a estação, a configuração retorna ao estado de somente leitura, por esse motivo que está dando erro ao tentar sobrescrever os arquivos, vou testar colocando a pasta no endereço "C:\Program Files (x86)\Apolo". Vou testar e te retorno.

    Obrigado!


    terça-feira, 18 de abril de 2017 11:05
  • Legal,

    Faz o teste e posta aqui no forum.

    Estou estudando uma outra possibilidade

    terça-feira, 18 de abril de 2017 14:39
  • Sabe informa se são muitos os arquivos que devem permanecer, no caso quando já existe a pasta C:\Apolo\.

    Exemplo deve ter um arquivo onde ficas o histórico, talvez podemos fazer uma exceção excluindo ou renomeando os outros e mantendo apenas o arquivo de histórico. 

    terça-feira, 18 de abril de 2017 14:45
  • Fernando,

    Faz o teste com script abaixo, estou usando o comando xcopy para resolver o problema para copiar os arquivos já existentes.

    Set Shell = WScript.CreateObject("WScript.Shell")
    
     strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2"
     strDestino = "C:\Apolo\" 
    
     Dim fso
     Dim ObjFile
     Dim objFSO
     Set fso = WScript.CreateObject("Scripting.Filesystemobject")
     
     If (fso.FolderExists(strDestino) = false) Then
        fso.CreateFolder(strDestino) 
        Shell.Run "xcopy " & strCaminho & " " & strDestino & " /S /Y "
     Else        
        Shell.Run "xcopy " & strCaminho & " " & strDestino & " /S /Y "
     End if
    
     Set Shell = Nothing
     Set fso = Nothing
    
    wscript.quit

    quinta-feira, 20 de abril de 2017 14:26
  • Carlos perfeito!

    No primeiro código já estava funcionando, era realmente permissão para escrever na pasta, ficou perfeito meu amigo!

    Muito Obrigado!

    Grande Abraço.

    quinta-feira, 20 de abril de 2017 19:56