-1

Я пытаюсь настроить некоторые проверки / таймеры для ожидания, если служба займет больше времени для цикла. Если это не удастся, я буду использовать что-то еще, чтобы проанализировать файл журнала и напишите мне предупреждение, если это не удастся.

По какой-то причине я получаю синтаксическую ошибку в цикле for. Если я удаляю оператор else, он работает нормально. Но я не могу найти ничего плохого в синтаксисе в операторе else.

@echo off
set ServiceName="My Service Name"
set logPath="C:\Program Files\Application"

::Start Service Maintenance
set now=[%DATE:~10,14%-%DATE:~4,2%-%DATE:~7,2%T%TIME:~0,8%]

for /F "tokens=3 delims=: " %%H in ('sc query %ServiceName% ^| findstr "        STATE"') do (
@echo %now% - For Loop >> %logPath%\ServiceManagmentLog.txt
  if /I "%%H" NEQ "STOPPED" (
  @echo %now% - Service Stopped - %ServiceName% >> %logPath%\ServiceManagmentLog.txt ) else (
    @echo %now% - The service doens't seem to be stopping, waiting another 5 seconds and trying again >> %logPath%\ServiceManagmentLog.txt
    ping -n 6 127.0.0.1 > nul
    sc start %ServiceName%
    ping -n 6 127.0.0.1 > nul
    for /F "tokens=3 delims=: " %%I in ('sc query %ServiceName% ^| findstr "        STATE"') do (
      if /I "%%I" NEQ "STOPPED"( 
      @echo %now% - Service Stopped - %ServiceName% >> %logPath%\ServiceManagmentLog.txt    ) else (
      set stopError="%ServiceName% Failed to Stop"
      @echo %now% - ALERT - There seems to be an issue stopping %ServiceName% ) 
      ) 
    ) 
  )

1 ответ1

-1

Ответ был ошибкой форматирования. Я пропустил трейлинг )

for /F "tokens=3 delims=: " %%H in ('sc query %serviceName% ^| findstr "        STATE"') do (
@echo %now% - For Loop >> %logPath%\ServiceManagmentLog_IC_%arg1%.txt
    if /I "%%H" EQU "STOPPED" (
        @echo %now% - Service Stopped - %serviceName% >> %logPath%\ServiceManagmentLog_IC_%arg1%.txt 
    ) else (
        @echo %now% - The service doens't seem to be stopping, waiting another %arg2% seconds and trying again >> %logPath%\ServiceManagmentLog_IC_%arg1%.txt
        ping -n %arg2% 127.0.0.1 > nul
        sc stop %serviceName%
        ping -n %arg2% 127.0.0.1 > nul
        for /F "tokens=3 delims=: " %%H in ('sc query %serviceName% ^| findstr "        STATE"') do (
            if /I "%%H" EQU "STOPPED" ( 
                    @echo %now% - Service Stopped - %serviceName% >> %logPath%\ServiceManagmentLog_IC_%arg1%.txt
                ) else (
                    @echo %now% - ALERT - There seems to be an issue stopping %serviceName% >> %logPath%\ServiceManagmentLog_IC_%arg1%.txt
                ) 
        ) 
    )
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .