Ir ao conteúdo
  • Cadastre-se

Bat Script .BAT para execução de serviços


Posts recomendados

Senhores peço ajuda...

 

Pois preciso criar uma bat ou um script power shell que:

 

Stop o serviço de nome 8084

Valide que parou com sucesso

Delete três pastas dentro do disco D

Depois de finalizado o serviço de delete ele start novamente no serviço, poderiam me ajudar ?

 

Link para o comentário
Compartilhar em outros sites

Hm, digamos que as pastas que devem ser deletadas sejam pasta01, pasta02 e pasta03 dentro de d:. No caso ele só vai deletar as 3 pastas se o serviço for finalizado com sucesso e reinicia o serviço.

No caso o script tem que ser rodado como administrador


@echo off 

chcp 1252> Nul
net stop 8084
If "%errorlevel%"=="0" (
rd /q /s d:\pasta01
rd /q /s d:\pasta02
rd /q /s d:\pasta03
net start 8084
) else (echo O serviço não pode ser finalizado& pause)

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@ricardo_br Uma dúvida, tem como fazer um comando se ele der erro dar kill no serviço ?

Exemplo caso der erro ao executar o stop do serviço, ele tenta novamente mas forçando o encerramento ?

 

chcp 1252> Nul
net stop 8000
If "%errorlevel%"=="0" (
rd /q /s "D:\MV\servers\soulmv_prd\tomcat-soulmv-8000\work"
rd /q /s "D:\MV\servers\soulmv_prd\tomcat-soulmv-8000\temp"
rd /q /s "D:\MV\servers\soulmv_prd\tomcat-soulmv-8000\logs"
net start 8000
pause

Link para o comentário
Compartilhar em outros sites

Pode sim,

Por exemplo você executa o comando01 e só quer que o comando02 seja executado se o comando01 falhar:


comando01 || comando02

[code]

Outra maneira de fazer a mesma coisa:

[code]

comando01

if not %Errorlevel% EQU 0 comando02

 

Aqui tem outro exemplo se o comando01 for bem sucedido execute o comando02 senão execute o comando03


comando01 && comando02 || comando03

 

 

 

adicionado 0 minutos depois

https://ss64.com/nt/syntax-redirection.html

Link para o comentário
Compartilhar em outros sites

Se o serviço não fechar de modo normal provavelmente é porque ele faz alguma função essencial no Windows e se você o finalizar pode dar algum problema como travar o computador ou tela azul mais se você já sabe onde está mexendo ficaria algo assim:

 

@echo off
chcp 1252> Nul
net stop 8084
If "%errorlevel%"=="0" (
rd /q /s d:\pasta01
rd /q /s d:\pasta02
rd /q /s d:\pasta03
net start 8084
) else (
for /f "tokens=3" %%a in ('sc queryex 8084 ^|find /i "PID"') do taskkill /PID "%%a" /f
rd /q /s d:\pasta01
rd /q /s d:\pasta02
rd /q /s d:\pasta03
net start 8084
)

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Não basicamente você só tem que colocar o nome verdadeiro do serviço que provavelmente não é 8084.

 

Vou tentar explicar o que o comando for faz nesse caso. Basicamente ele pega o PID (Process identifier do serviço 8084). Ele da um comando sc queryex 8084 que vai resultar em algo assim: (Vou fingir aqui que o Windows update é o 8084 porque não tenho um serviço 8084 no meu pc)

 

dg7ddV7.jpg

 

Depois de dar o comando ele pesquisa a linha que tem "PID" e pega a terçeira coluna que é um número tipo 19160 algo assim e com esse PID que ele pega ele da um taskkill pelo PID.

 

 

Link para o comentário
Compartilhar em outros sites

Ai depente se você quer fazer aquela verificação igual na primeira ou não. Para pedir para 2 serviços fechar de boa e se não quiserem forçar seria algo assim:

 

net stop 8084 || for /f "tokens=3" %%a in ('sc queryex 8084 ^|find /i "PID"') do taskkill /PID "%%a" /f

net stop 8000 || for /f "tokens=3" %%a in ('sc queryex 8000 ^|find /i "PID"') do taskkill /PID "%%a" /f

 

A parte atrz dos Pipe (||) só é executada se o comando da frente falhar.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Lucas Mateus de Morais disse:

@ricardo_br Dos arquivos das 03 pastas. Um log para cada pasta. Queria salvar no C cada um com um nome

 

Tâ digamos que você tem 3 pastas na área de trabalho chamadas pasta01, pasta02 e pasta03

 

para cada uma será gravado um log em:

c:\logs\pasta01.log

c:\logs\pasta02.log

c:\logs\pasta03.log

 

Ai você implementaria no seu bat algo assim para deletar os arquivos e manter um log:

 


@echo off
if not exist c:\logs md c:\logs
for %%a in ("%userprofile%\desktop\pasta01\*") do (
del "%%a"
if not exist "%%a" echo %Date% %time:~0,8%: O arquivo: "%%~nxa" foi deletado com sucesso>> c:\logs\pasta01.log
if exist "%%a" echo %Date% %time:~0,8%: Falha ao tentar excluir o arquivo: "%%~nxa">> c:\logs\pasta01.log
)

for %%a in ("%userprofile%\desktop\pasta02\*") do (
del "%%a"
if not exist "%%a" echo %Date% %time:~0,8%: O arquivo: "%%~nxa" foi deletado com sucesso>> c:\logs\pasta02.log
if exist "%%a" echo %Date% %time:~0,8%: Falha ao tentar excluir o arquivo: "%%~nxa">> c:\logs\pasta02.log
)

for %%a in ("%userprofile%\desktop\pasta03\*") do (
del "%%a"
if not exist "%%a" echo %Date% %time:~0,8%: O arquivo: "%%~nxa" foi deletado com sucesso>> c:\logs\pasta03.log
if exist "%%a" echo %Date% %time:~0,8%: Falha ao tentar excluir o arquivo: "%%~nxa">> c:\logs\pasta03.log
)

 

Ai ficaria 3 logs na pasta log e dentro do log ficaria algo assim:

 


20/01/2020 18:21:02: Falha ao tentar excluir o arquivo: "Arquivo_1.txt"

20/01/2020 18:17:40: O arquivo: "Arquivo_4.txt" foi deletado com sucesso
20/01/2020 18:17:40: O arquivo: "Arquivo_5.txt" foi deletado com sucesso
20/01/2020 18:17:40: O arquivo: "Arquivo_6.txt" foi deletado com sucesso
20/01/2020 18:17:40: O arquivo: "Arquivo_7.txt" foi deletado com sucesso

 

 

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br uma dúvida....

Se a baixo do comando net stop eu quisesse mesmo assim dar um taskkill forçando encerrar como ficaria ?

 

net stop 8084

 

Muito obrigado rodei o script ontem no meu servidor funcionou muito bem, apenas verifiquei essa necessidade, pois o processo ficou preso e na hora de dar start deu erro, você é fera valeu mesmo!!!

 

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Lucas Mateus de Morais disse:

@ricardo_br eu quero executar o comando NET STOP e em seguida quero que ele tente exutar tskill, pois caso o programa ainda esteja aberto ele encerra.

 

É só colocar um embaixo do outro...Aquele comando como eu coloquei não conseguiu finalizar o serviço?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...