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”(