• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

softklin

[Ajuda] Um .bat para iniciar e parar serviços

8 mensagens neste tópico

Boa noite.

Pessoal, é o seguinte: estou a tentar automatizar algumas tarefas aqui no PC, entre as quais, desligar e ligar um serviço específico. A minha ideia é ter um batch file que ao ser executado, detecta se o serviço está activo ou não, e toma uma acção (desligar ou ligar o serviço, respectivamente).

Tentei desenvolver o seguinte script:

net start > servicos
IF findstr /M "FAH@E:+fah+FAH504-Console.exe" servicos == servicos GOTO PARA
GOTO INICIA

:INICIA
net start FAH@E:+fah+FAH504-Console.exe
GOTO FIM

:PARA
net stop FAH@E:+fah+FAH504-Console.exe

:FIM
del /Q servicos

O nome do serviço é FAH@E:+fah+FAH504-Console.exe. A função findstr procura determinado texto dentro de ficheiros. O que eu não estou a conseguir fazer é aquele if  :D porque de resto, acho que está tudo nos conformes.

Se alguém perceber um bocado disto, ajude-me sff. Obrigado desde já  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

If you try to start a service that is already running you will get this error message:

"The requested service has already been started. More help is available by typing NET HELPMSG 2182"

You can redirect and FIND this type of error as follows:

NET START alerter 2>&1|FIND "2182"

IF errorlevel 1 goto :s_started

http://www.ss64.com/nt/net_service.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela ajuda vitortomaz.

Segui a tua sugestão, e fiz assim:

@ECHO OFF
net start > servicos
find FAH@E:+fah+FAH504-Console.exe servicos
IF errorlevel 1 GOTO :PARA

:INICIA
net start FAH@E:+fah+FAH504-Console.exe
GOTO FIM

:PARA
net stop FAH@E:+fah+FAH504-Console.exe

:FIM

ou seja, cria um ficheiro chamado 'servicos' e procura nele o nome do serviço que quero. O código funciona (consegue distinguir se está activo ou não), mas por alguma razão o serviço não é iniciado. Mas por outro lado, o serviço é sempre parado com êxito.  :hmm:

EDIT: Afinal não funciona, vai sempre para a label :PARA... :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

porque é que queres parar o serviço ou iniciar consoante o seu estado?

não era mais simples um script para iniciar serviços e outro para parar serviços?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas queria ver se conseguia fazer tudo num só ficheiro...

Porque isto vai ficar no desktop, e assim sempre era menos um ícone... Mas como já está a ficar um bocado complicado, se calhar vou ficar-me por ter os dois ficheiros... Fi-lo por curiosidade, já que podia também pegar numa linguagem qualquer e fazer isso lá.

Obrigado pela tua ajuda, de qualquer das maneiras, sempre aprendi mais um bocado!  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

experimenta fazer exactamente como está no exemplo: NET START alerter 2>&1|FIND "2182"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava a trocar a lógica do errorlevel...  :P

Está a funcionar! Com umas optimizações, ficou assim:

@ECHO OFF
NET START FAH@E:+fah+FAH504-Console.exe 2>&1|FIND "2182"
IF errorlevel 1 GOTO :FIM

:PARA
net stop FAH@E:+fah+FAH504-Console.exe

:FIM

Não percebo é esta parte da 2ª linha: "2>&1". Sabes dizer-me que é isto? Sei que faz o redireccionamento para algum lado, mas não estou a ver para onde...

Obrigado, agora está a funcionar como pretendia  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

“2 > &1” redirecciona o STDERR para o STDOUT acho eu

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora