Ir ao conteúdo
  • Cadastre-se
Lucas Mateus de Morais

Shell Script 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 ?

 

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parando o serviço:

 

sc stop 8084

 

deletando as pastas

 

rd pasta1

rd pasta2

rd pasta3

 

iniciando o serviço:

 

sc start 8084

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, Lucas Mateus de Morais disse:

@ricardo_br muito obrigado pela ajuda. 

Apenas uma dúvida para que serve o comando ?

chcp 1252> Nul

Para poder criar textos com acentos como "serviço não".

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ricardo_br muito obrigado!

 

Só mais uma dúvida, nessa linha eu preciso mudar algo ?

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

 

o que seria tokens = 3 ?

Compartilhar este post


Link para o post
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.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tokens=3 quer dizer pegar a terçeira coluna do que resultar do comando sc queryex 8084 ^|find /i "PID"

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ricardo_br Só mais uma dúvida à ultima kkkkkk......

 

Se na seguinte linha a baixo eu quisesse parar mais de um serviço tem como ?

além do 8084 eu quisesse parar o 8000 simultaneamente tem como ?

net stop 8084

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer dizer as mensagens de erro? Seria só desabilitar o @echo off

 

Geralmente quando um comando é executado com exito ele grava a variável %errorlevel% igual 0 se errorlevel não for 0 então deu algum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo as 3 pastas? Ou os arquivos que tem nas pastas?

 

rd /q /s d:\pasta01
rd /q /s d:\pasta02
rd /q /s d:\pasta03

Compartilhar este post


Link para o post
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

 

 

 

Compartilhar este post


Link para o post
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!!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim, você quer forçar o encerramento mesmo se o net stop não dar erro?

Seria só colocar um embaixo do outro...

 

net stop 8084

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Compartilhar este post


Link para o post
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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

ebook grátis "Aprenda a ler resistores e capacitores", de Gabriel Torres

GRÁTIS! BAIXE AGORA MESMO!