Как разобрать вывод переменной в пакетном скрипте?

Вопрос или проблема

Я пытаюсь выполнить следующую команду:

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!

Объяснение кода

  1. Сохраняем ответ: С помощью for /f мы запускаем вашу команду и сохраняем результат после пропуска первой строки.
  2. Используем enabledelayedexpansion: Это важно, чтобы получить доступ к значениям переменных, установленным внутри цикла.
  3. Парсинг строки: Мы используем еще один цикл for, который разбивает response на токены. Знаки-разделители устанавливаются как запятые (,), поэтому можно легко получить нужные значения. Применение tokens=2,4 указывает на то, что мы хотим получить второй и четвертый элементы из разбитой строки.
  4. Чистка значений: Для удаления лишних пробелов используется set variable=!variable:~1!.

Заключение

Таким образом, вы сможете извлечь значения статуса приложения и режима работы из переменной в пакетном скрипте. Не забудьте протестировать ваш скрипт с реальными данными и в случае необходимости адаптировать его под ваши нужды.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...