Пакет Windows для просмотра значений переменной - PullRequest
0 голосов
/ 15 мая 2019

У меня есть основной набор значений и подмножество к нему

Основной набор: Group1,Group2,Group3

Подмножество: Group1_Sub1,Group1_Sub2,Group2_Sub1,Group3_Sub1,Group3_Sub2

Group1 ->Group1_Sub1 and Group1_Sub2

Group2 ->Group2_Sub1

Group3 ->Group3_Sub1,Group3_Sub2

Для каждого основного списка я бы хотел выполнить цикл только по соответствующему списку подгрупп и отобразить вывод.

В настоящее время я использую код ниже

for %%s in (

Group1,Group2,Group3

    ) do (

        echo set Main Group %%s >> Log.txt

        for %%i in (
                    Group1_Sub1,Group1_Sub2,Group2_Sub1,Group3_Sub1,Group3_Sub2
                    ) do (
                        echo Main Group is %%s and its sub group is %%i >>Log.txt
                         )
            )

Приведенный выше код выдаст мне вывод:

set Main Group Group1 
Main Grpup is Group1 and its sub group is Group1_Sub1 
Main Grpup is Group1 and its sub group is Group1_Sub2 
Main Grpup is Group1 and its sub group is Group2_Sub1 
Main Grpup is Group1 and its sub group is Group3_Sub1 
Main Grpup is Group1 and its sub group is Group3_Sub2 
set Main Group Group2 
Main Grpup is Group2 and its sub group is Group1_Sub1 
Main Grpup is Group2 and its sub group is Group1_Sub2 
Main Grpup is Group2 and its sub group is Group2_Sub1 
Main Grpup is Group2 and its sub group is Group3_Sub1 
Main Grpup is Group2 and its sub group is Group3_Sub2 
set Main Group Group3 
Main Grpup is Group3 and its sub group is Group1_Sub1 
Main Grpup is Group3 and its sub group is Group1_Sub2 
Main Grpup is Group3 and its sub group is Group2_Sub1 
Main Grpup is Group3 and its sub group is Group3_Sub1 
Main Grpup is Group3 and its sub group is Group3_Sub2 

Я бы хотел ограничить их просмотр только соответствующим списком, как показано ниже

set Main Group Group1 
Main Grpup is Group1 and its sub group is Group1_Sub1 
Main Grpup is Group1 and its sub group is Group1_Sub2 
set Main Group Group2 
Main Grpup is Group2 and its sub group is Group2_Sub1 
set Main Group Group3  
Main Grpup is Group3 and its sub group is Group3_Sub1 
Main Grpup is Group3 and its sub group is Group3_Sub2 

Как мне этого добиться?

Ответы [ 2 ]

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

во внутреннем цикле (%% i):

    ECHO %%i|FINDSTR /b /i /L /c:"%%s_">nul
    IF NOT ERRORLEVEL 1 echo Main Group is %%s and its sub group is %%i >>Log.txt

, который отображает (например) Group1_Sub2 в findstr, который ищет строку /b, начинающуюся с текущего значения %%s + подчеркивание/i означает нечувствительный к регистру, /L означает буквальное сравнение, а /c: указывает обнаруживаемую строку.

Если findstr найдет искомую строку, тогда errorlevel будет установлен в 0или 1 в противном случае.>nul подавляет вывод.errorlevel может быть затем протестирован с использованием обычного синтаксиса.

0 голосов
/ 15 мая 2019

Как вы говорите о переменных: следующий код ищет основные группы и их подгруппы сам по себе:

@echo off
setlocal enabledelayedexpansion

REM following line just for generating test variables:
for %%a in (1 2 3) do for %%b in (1 2 3 4) do set "Group%%a_Sub%%b=!random!"

REM search MainGroups:
for /f "delims=_" %%a in ('set group') do set "Main_%%a=Group"
REM process each MainGroup
for /f "tokens=2 delims=_=" %%a in ('set Main_') do (
  echo set Main Group %%a
  for /f "delims==" %%b in ('set %%a_') do (
    echo Main Group is %%a and its sub group is %%b and its content is !%%b!
  )
)

Pro: нет необходимости жестко кодировать каждое имя переменной
Con (?): не перечисляет пустые (несуществующие) переменные (в зависимости от ваших потребностей, это может быть даже другой Pro)

...