echo 3050 >> services
^ remove this evil space
porque, embora sc query "Service_3050"
possa funcionar, sc query "Service_3050 "
com esse espaço adicional gerará o próximo erro:
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:
The specified service does not exist as an installed service.
Existe outro erro severo em seu código: usando :label
dentro um bloco de código (
entre parênteses )
quebrará um contexto de loop for
. Use call :label
da seguinte forma:
for /f %%a in (services) do (
set timestamp=!date!!time!
ECHO !timestamp! - Stopping Service %%a >> log.txt
sc stop Service_%%a >> log.txt
timeout /t 15 > NUL
for /f "tokens=4" %%s in ('
sc query "Service_%%a" ^| find "STATE"
') do if NOT "%%s"=="STOPPED" CALL :ForceStop "%%a%
ECHO !timestamp! - Service is stopped >> log.txt
timeout /t 5 > NUL
set timestamp=!date!!time!
ECHO !timestamp! - Starting Service %%a >> log.txt
sc start "Service_%%a" >> log.txt
call :WAIT "%%a%
)
goto :done
:WAIT
ECHO !timestamp! - Service not yet started >> log.txt
timeout /t 5 > NUL
for /f "tokens=4" %%s in ('
sc query "Service_%~1" ^| find "STATE"
') do if NOT "%%s"=="RUNNING" goto :WAIT
ECHO !timestamp! - Service is started >> log.txt
exit /B
:ForceStop
ECHO !timestamp! - Service could not be stopped, forcing... >> log.txt
taskkill /f /im Service_%~1.exe >> log.txt
exit /B
:done
if exist services del services
Recursos (leitura obrigatória):
- (referência de comando) Um índice A-Z da linha de comando do Windows CMD
- (particularidades adicionais) Sintaxe da linha de comando do shell do Windows CMD
- (
%~a
,%~1
etc. página especial) Argumentos da linha de comando (parâmetros) - (página especial) EnableDelayedExpansion
- (
>>
,2>1
etc. página especial) Redirecionamento