Batch file 通过批处理文件创建没有重复项的元素集合

Batch file 通过批处理文件创建没有重复项的元素集合,batch-file,for-loop,iteration,Batch File,For Loop,Iteration,我在生成结果数组的自定义工具上运行多个for循环 我需要把它们平铺成一个没有重复的集合 我的第一个想法是创建一个数组,其中键是项,见下文。但这是一场噩梦,之后再重复…: 设置应用程序= 对于(“.\manifests\*.xml”)中的/d%%s,请执行以下操作( 对于('xml sel-t-v“\apps\app”%cd%\manifests\%%s)中的/f“tokens=*”%%g( echo找到应用程序-%%g[在%%s内] 第一个想法如下: 设置应用[%%g]=true ) ) rem

我在生成结果数组的自定义工具上运行多个
for
循环

我需要把它们平铺成一个没有重复的集合

我的第一个想法是创建一个数组,其中键是项,见下文。但这是一场噩梦,之后再重复…:

设置应用程序=
对于(“.\manifests\*.xml”)中的/d%%s,请执行以下操作(
对于('xml sel-t-v“\apps\app”%cd%\manifests\%%s)中的/f“tokens=*”%%g(
echo找到应用程序-%%g[在%%s内]
第一个想法如下:
设置应用[%%g]=true
)
)
rem之后如何迭代应用程序?
刚刚搞定了:

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
        )
)
刚刚搞定了:

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
        )
)

你的想法是通过数组获得没有重复项的元素。我只建议您在
set
命令的
variable=value
部分之间加引号;这是一种很好的做法,可以避免为变量指定未被注意到的空格

创建数组后,可以用非常简单的方法迭代元素:

@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

你的想法是通过数组获得没有重复项的元素。我只建议您在
set
命令的
variable=value
部分之间加引号;这是一种很好的做法,可以避免为变量指定未被注意到的空格

创建数组后,可以用非常简单的方法迭代元素:

@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

要迭代应用程序:
for/F“tokens=2 delims=[]”%%a in('set apps[')do echo%%a
。顺便说一句,不需要第一个
set apps=
命令,因为
apps
变量与
apps[索引]没有关系
一个。请参阅:@Aacini您能将此作为答案发布,以便我可以对其进行投票吗?完成!您也可以更改所选答案,如果您愿意…
;)
以迭代应用程序:
for/F“tokens=2 delims=[]”中的%%a('set apps[')执行echo%%a
。顺便说一句,不需要第一个
设置应用程序=
命令,因为
应用程序
变量与
应用程序[索引]没有关系
一个。请参阅:@Aacini您能将此作为答案发布,以便我可以投票吗?完成!您也可以更改所选答案,如果您愿意…)请注意,
apps\u defined
apps\u defined[1]是不同的变量
,因此您最初的
设置应用程序定义=
命令是无用的…我建议您阅读。此外,如果未定义应用程序定义[%%g](而不是
如果未定义应用程序定义[%%g]”==“true”(
请注意,
应用程序定义的
应用程序定义的[1]是不同的变量)
,因此您最初的
设置应用程序定义=
命令是无用的…我建议您阅读。此外,如果未定义应用程序定义[%%g](而不是
如果未定义应用程序定义[%%g]”==“true”(