Как вы помещаете кавычки вокруг переменной цикла For в пакетном режиме? - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над пакетным сценарием, который будет принимать список серверов, проходить через них, находить все службы на каждом сервере, которые запускаются с определенным значением, и запрашивать эту службу. Однако, учитывая, что имена сервисов могут быть созданы с пробелами, мне нужно иметь возможность заключать в кавычки переменную for. Каков наилучший способ сделать это?

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

@ECHO off
ECHO Please list servers to query.
SET list=
SET /P list=Server Names:

FOR %%a IN (%list%) DO (
  FOR /F "Skip=1 Delims-" %%b IN ('wmic service where "name like 'ADOBE%%'" get Name ^| findstr /r /v "^$"') DO (
  ECHO %%b
  sc \\%%a query ^"%%b^"
  )
)
pause
GOTO :eof

В выходных данных отображается имя службы любой службы, которая начинается с «ADOBE» на одном из серверов, указанных в% list%.

Я получаю "EnumQueryServiceStatus: OpenService FAILED 1060: Указанная служба не существует как установленная служба. "

Когда я разрешаю эхо-скрипту, я вижу это: ХО AdobeARMservice "\ [servername] query" AdobeARMservice

1 Ответ

1 голос
/ 24 мая 2019

Основная проблема связана с пробелами и символами возврата каретки в выводе wmic. Если вы добавите кавычки около %%b в строке с echo в своем коде, вы увидите, что заключительная кавычка отсутствует в выводе.

Рабочий код:

@echo off
setlocal enabledelayedexpansion
FOR /F "Skip=1 Delims=" %%b IN ('wmic service where "name like 'ADOBE%%'" get Name ^| findstr /r /v "^$"') DO (
  for /f "delims=" %%c in ("%%b") do ( rem this will get rid of CR character
   set d=%%c
   :loop
   if "!d:~-1!"==" " ( rem here we'll remove the trailing spaces
      set d=!d:~0,-1!
      goto :loop
   )

   echo "%d%"
   sc query "%d%"
   )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...