Ir ao conteúdo

Posts recomendados

Postado

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 ?

 

Postado

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
Postado

@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

Postado

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

Postado

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
Postado

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.

 

 

Postado

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.

Postado

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.

Postado
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

 

 

 

Postado

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

 

Postado

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

Postado
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?

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