Вместо того, чтобы получать все службы и пытаться выяснить, запущены они или нет, вместо этого вы можете получить статус inactive
непосредственно из запроса и запустить его оттуда:
@for /f "tokens=1*" %%a in ('sc queryex state^=inactive ^| findstr /r /c:"DISPLAY_NAME:.*Sm"') do (
net start "%%b"
)
ПримечаниеВышеупомянутые скобки используют исключительно для удобства чтения, но они не нужны, вы можете скопировать все в одну строку, как показано ниже:
@for /f "tokens=1*" %%a in ('sc queryex state^=inactive ^| findstr /r /c:"DISPLAY_NAME:.*Sm"') do net start "%%b"