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!

Icon

battoexeconverter-20100503.zip
416.71 KB 9561 downloads

Autor: http://www.f2ko.de/

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

1
2
3
  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

1
2
3
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

1
2
3
4
5
6
7
8
9
@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!

Total de acessos: 50468

18 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/

  2. Estou tentando executar o standalone.bat do Jboss WildFy com este programa mas quando coloco ele pra rodar tenho esse erro.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    
    16:45:59,513 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.2.Final
    WFLYSRV0073: Invalid option 'C:UsersuserDownloadswildfly-10.1.0.Finalwildfl
    y-10.1.0.Finalbinstandalone.exe'
     
    Usage: standalone [args...]
    where args include:
        --admin-only                        Set the server's running type to
                                            ADMIN_ONLY causing it to open
                                            administrative interfaces and accept
                                            management requests but not start other
     
                                            runtime services or accept end user
                                            requests.
     
     
        -b , -b=              Set system property jboss.bind.address
                                            to the given value
     
     
        -b=               Set system property
                                            jboss.bind.address. to the
                                            given value
     
     
        -c , -c=            Name of the server configuration file
                                            to use (default is "standalone.xml")
                                            (Same as --server-config)
     
     
        --debug []                    Activate debug mode with an optional
                                            argument to specify the port. Only
                                            works if the launch script supports it.
     
     
        -D[=]                  Set a system property
     
     
        -h, --help                          Display this message and exit
     
     
        --read-only-server-config=  Name of the server configuration file
                                            to use. This differs from
                                            '--server-config' and '-c' in that the
                                            original file is never overwritten.
     
     
        -P , -P=,                 Load system properties from the given
             --properties=             url
     
     
        -S[=]                  Set a security property
     
     
        --server-config=            Name of the server configuration file
                                            to use (default is "standalone.xml")
                                            (Same as -c)
     
     
        -u , -u=              Set system property
                                            jboss.default.multicast.address to the
                                            given value
     
     
        -v, -V, --version                   Print version and exit
     
     
        -secmgr                             Runs the server with a security manager
     
                                            installed.
     
     
    16:46:00,214 FATAL [org.jboss.as.server] (main) WFLYSRV0239: Aborting with exit
    code 1
    Pressione qualquer tecla para continuar. . .
    • Olá, parece ser um problema no seu script e não com o BatToExeConverter. Verifique se esse caminho que você usa no seu bat está correto: “C:\Users\user\Downloads\wildfly-10.1.0.Final\wildfly-10.1.0.Final\bin\standalone.exe”. Ou tente achar o erro pelo Google.

Deixe uma resposta

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