Вопрос или проблема
Я пытаюсь выполнить следующую команду:
for /f “usebackq skip=1” %%i in (mlcmd -cshost ***HOST*** -csport 2020 -csappname default -csuser ***UN*** -cspassword ***PW*** -scshost ***HOST*** -scsport 4057 -timeout 60 -getappstatus TServer_CCM_Lab
) do (
set response=%%i
)
@echo=%response%
Ответ:
TServer_CCM_Lab
Приложение с DBID 740 имеет статус “APP_STATUS_RUNNING”, режим работы “PRIMARY”
Как мне разобрать ответ и установить APP_STATUS_RUNNING и PRIMARY в переменные?
Спасибо за вашу помощь!
Ответ или решение
Чтобы правильно проанализировать выходные данные переменной в пакетном скрипте и извлечь необходимые данные, такие как статусы приложения и режим работы, вам потребуется воспользоваться встроенными средствами командного интерпретатора Windows. Ниже представлены детальные инструкции и пример кода для выполнения этой задачи.
Шаг 1: Запуск команды и сохранение результата
В вашем начальном коде присутствует цикл for
, который позволяет обрабатывать выходные данные команды. Для начала, давайте убедимся, что вы корректно сохраняете результат в переменной response
. Ваш текущий код выглядит правильно, но стоит упомянуть, что для корректного отображения позднее необходимо использовать команду call
при установке значения переменной в контексте цикла.
Шаг 2: Парсинг строки
После того как вы сохранили строку в переменной, следующим шагом будет использование дополнительных команд для извлечения нужных данных. В данном случае нас интересует извлечение статуса приложения и режима работы. Вы можете использовать дополнительные команды for /f
для этого.
Пример кода
@echo off
setlocal enabledelayedexpansion
for /f "usebackq skip=1" %%i in (`mlcmd -cshost ***HOST*** -csport 2020 -csappname default -csuser ***UN*** -cspassword ***PW*** -scshost ***HOST*** -scsport 4057 -timeout 60 -getappstatus TServer_CCM_Lab`) do (
set response=%%i
)
echo Response: !response!
rem Парсим статус приложения и режим работы
for /f "tokens=2,4 delims=," %%a in ("!response!") do (
set status=%%a
set mode=%%b
)
rem Очищаем лишние пробелы
set status=!status:~1!
set mode=!mode:~1!
echo APP_STATUS: !status!
echo Runmode: !mode!
Объяснение кода
- Сохраняем ответ: С помощью
for /f
мы запускаем вашу команду и сохраняем результат после пропуска первой строки. - Используем
enabledelayedexpansion
: Это важно, чтобы получить доступ к значениям переменных, установленным внутри цикла. - Парсинг строки: Мы используем еще один цикл
for
, который разбиваетresponse
на токены. Знаки-разделители устанавливаются как запятые (,
), поэтому можно легко получить нужные значения. Применениеtokens=2,4
указывает на то, что мы хотим получить второй и четвертый элементы из разбитой строки. - Чистка значений: Для удаления лишних пробелов используется
set variable=!variable:~1!
.
Заключение
Таким образом, вы сможете извлечь значения статуса приложения и режима работы из переменной в пакетном скрипте. Не забудьте протестировать ваш скрипт с реальными данными и в случае необходимости адаптировать его под ваши нужды.
Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.