Создать коллекцию элементов без дубликатов через командный файл - PullRequest
0 голосов
/ 01 декабря 2018

Я запускаю несколько for циклов над пользовательским инструментом, который выдает массив результатов.

Мне нужно объединить их в одну коллекцию без дубликатов .

MyПервой идеей было создать массив, ключами которого являются элементы, см. ниже.Но это кошмар, чтобы повторить потом ...:

set apps=
for /d %%s in (".\manifests\*.xml") do (
    for /f "tokens=*" %%g in ('xml sel -t -v "\apps\app" %cd%\manifests\%%s') do (
            echo Found app - %%g [inside %%s]
            rem First idea below:
            set apps[%%g]=true
        )
)
rem How to iterate apps afterwards?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Ваша идея получить элементы без дубликатов через массив хороша.Я только предлагаю заключить в кавычки часть variable=value команд set;Это хорошая практика, чтобы избежать незаметных пробелов, которые могут быть назначены переменной.

После того, как вы создали массив, вы можете итерировать элементы очень простым способом:

@echo off
setlocal

for /d %%s in (".\manifests\*.xml") do (
    for /f "tokens=*" %%g in ('xml sel -t -v "\apps\app" %cd%\manifests\%%s') do (
            echo Found app - %%g [inside %%s]
            rem First idea below:
            set "apps[%%g]=true"
        )
)

rem Iterate the array elements:
for /F "tokens=2 delims=[]" %%a in ('set apps[') do echo %%a
0 голосов
/ 01 декабря 2018

Просто прибил:

set apps=
set apps_defined=

for /d %%s in (".\manifests\*.xml") do (
    for /f "tokens=*" %%g in ('xml sel -t -v "\apps\app" %cd%\manifests\%%s') do (
            echo Found app - %%g [inside %%s]

            if not "apps_defined[%%g]"=="true" (
                 if not "!apps!"=="" set apps=!apps!,
                 set apps=!apps!%%g
            )

            set apps_defined[%%g]=true
        )
)
...