Это фрагмент моего командного файла. Мне нужно определить, существует ли служба, если она работает, остановите ее, измените на отключенную в одной приятной строке.

echo.&echo.&echo =====Disable services=====
echo.
for %%x in (
"Mcx2Svc"   
"NetTcpPortSharing" 
"RemoteRegistry"
"SharedAccess"
"fax"
"TabletInputService"
"RemoteAccess"
"UxSms"
"Bdesvc"
"EFS"
"wsearch"
"ehsched"
"ehRecvr"
) do (sc query %%x| find "STATE" >nul 2>&1 && sc query %%x| find "RUNNING" >nul 2>&1 && echo Changing services to disabled: %%x && sc config %%x start= disabled)

1 ответ1

0

Сложенный запрос sc и find не имеют смысла для меня. Даже если не одна приятная строчка, это ИМХО более понятно.

@Echo off
echo.&echo.&echo =====Disable services=====
echo.
for %%x in (
  "Mcx2Svc"   
  "NetTcpPortSharing" 
  "RemoteRegistry"
  "SharedAccess"
  "fax"
  "TabletInputService"
  "RemoteAccess"
  "UxSms"
  "Bdesvc"
  "EFS"
  "wsearch"
  "ehsched"
  "ehRecvr"
) do For /f "tokens=1-3 delims=: " %%S in (
  'sc query %%x ^|findstr /i "STATE" 2^>^&1 '
) Do (
  echo Changing services to disabled: %%x %%S %%T %%U
  Echo sc config %%x start= disabled
)

Параметр for /f анализирует выходные данные запроса sc и фильтрует строку с помощью STATE, сохраняя ее в переменных %% S, %% T, %% U
Чтобы показать, что будет выполнено, sc config сопровождается эхом. Удалите эхо, чтобы активировать команду.

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