Executar script .bat em segundo plano [Resolvido]

Dias atrás precisei que algumas máquinas Windows da minha rede rodassem um script .bat em background (sem que o usuário perceba). Se isto é o que você precisa, siga em frente!

Download
Para fazer o download acesse o site do Desenvolvedor ou clique no link abaixo:

[dm]10[/dm]

matrix

Introdução
Batch ou arquivo de lote (também conhecidos por .bat) é um arquivo de computador utilizado para automatizar tarefas (Saiba mais…). Eu não pretendo discutir se usar .bat, VB, shell, java, Windows ou Linux é o melhor caminho. Não defendo tecnologias, mas as uso em meu favor, buscando o que elas tem de melhor a oferecer e isto pode variar de acordo com as necessidades ou ambiente que estou inserido.

Problema
Em fim, eu precisava de um .bat para mapear uma unidade de rede apontando para um diretório no servidor e também para rodar um script em .vbs que obtinha algumas informações de hardware das maquinas clientes. Mas tinha que ser transparente (background) para os usuários, pois se não, certamente eles fechariam a telinha do MS-DOS antes de completar o script.

Solução
Tentei alguns artifícios presentes na Internet, mas sem sucesso. O que realmente salvou a pátria foi o Bat To Exe Converter. O aplicativo permite converter .bat em .exe e ainda dá a opção “Ghost application” que é justamente quem possibilita fazer o executável rodar em segundo plano (background). Nem é necessário instalação!

Baixe, descompacte e execute o arquivo Bat_To_Exe_Converter.exe (Acima) e faça da seguinte forma:

(1) Clique no botão “…” ao lado do campo Batchfile e indique seu script .bat que será convertido
(2) Marque a opção “Ghost application”
(3) Clique no botão “Compile”

bat1

Note que será criado no mesmo diretório do seu .bat um outro arquivo de mesmo nome, porém, com extensão .exe. Tente executá-lo e verá que roda de forma transparente, sem qualquer janela visível.

Este Post poderia terminar por aqui que já teria cumprido seu objetivo. Mas vou estendê-lo mais um pouco detalhando os arquivos de script que utilizei, até mesmo para uma questão de futuras consultas.

Em resumo funciona assim: Num diretório do servidor coloquei alguns arquivos que em dado momento serão (uma única vez) copiados para a máquina cliente. São eles:
(1) rede.exe
(2) rede.reg
(3) scan.vbs

rede.exe nada mais é do que um arquivo rede.bat que compilei usando o Bat_To_Exe_Converter.exe mencionado neste Post. O servidor onde está este e outros arquivos funciona apenas de repositório, pois o objetivo é, posteriormente, copiar o “rede.exe” para a máquina cliente e criar uma chave no registro para que ele seja sempre executado ao iniciar o Windows. Como dito, este arquivo roda invisível ao usuário e tem a finalidade de mapear uma unidade de rede (t:) apontando para o diretório ” \\server\trabalho” (Área do usuário). Além disso, roda um script VB (scan.vbs) que obtem algumas informações do hardware.

rede.bat | Mapeia unidade de rede e executa .vbs
 
  net use t: /delete
  net use t: \\server\trabalho
  wscript \\server\aplicativos\scan.vbs

rede.reg, ao ser executado com dois cliques, cria uma chave (Valor da sequência) no registro do windows que faz com que “rede.exe” seja executado toda vez que o Windows inicializa. Esta chave pode ser vista após criada acessando o Menu “Iniciar” > “Executar”, digitando “regedit” e seguindo o caminho: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

rede.reg | Cria chave no registro do Windows
 
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"rede"="C:\\rede.exe"

scan.vbs é um script VB que captura algumas informações da hardware da máquina cliente. Utilizei este recurso pois precisava fazer um inventário das máquinas da rede a fim de obter alguns dados específicos (Não quis utilizar os softwares de inventários que existem na Internet). Não vou postar aqui o conteúdo do script “scan.vbs” pois é baseado no PCeX, que adaptei para meu uso a fim de gerar um sumário de hardware em XML. Maiores detalhes sobre PCeX, acesse:

Aproveito para deixar meu muito obrigado aos desenvolvedores do PCeX que gratuitamente disponibilizaram o código fonte.

Finalizando, criei um script para copiar os arquivos do servidor para a máquina cliente de um só vez. Então, tudo que eu tinha que fazer era ir na máquina cliente, acessar o compartilhamento no servidor e executar esse mini-instalador. A partir de então, toda vez que a máquina do cliente inicializava, o rede.exe (antigo .bat) rodava em background e cumpria a missão.

rede.install.bat| Instala solução nas máqunas clientes
 
@echo off
cls
@echo INICIANDO...
FOR /l %%a IN (%1,-1,1) do (ECHO 1 >NULL %%as&ping -n 2 -w 1 127.0.0.1>NUL)
@echo.
copy \\server\trabalho\aplicativos\rede.exe c:\rede.exe
\\server\trabalho\aplicativos\rede.reg
@echo FIM
FOR /l %%a IN (%1,-1,1) do (ECHO 1 >NULL %%as&ping -n 2 -w 1 127.0.0.1>NUL)

Só mais uma observação: Essa linha começando com “FOR” funciona apenas como uma pausa. Na verdade, foi a forma que encontrei de simular a função sleep (dormir) presente em várias linguagens de programação.

Até a próxima!

13 comentários sobre “Executar script .bat em segundo plano [Resolvido]

  1. Mário disse:

    Você não precisa usar esse FOR para ter uma pausa na execução do script. Se for WinXP use o comando SLEEP, mas se for Win7 use o comando TIMEOUT. #ficadica \o/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *