将字符串批量转换为每个元素问题的数组和子字符串

时间:2014-05-28 13:39:42

标签: arrays string batch-file substring

我有以下字符串:

AAA:BBB, CCC:DDD, EEE:FFF

我需要将BBB,DDD和FFF提取到单独的变量中,因为我需要为每个变量运行一次另一个脚本,并将变量作为参数。在这个例子中,我需要运行:

script.cmd BBB
script.cmd DDD
script.cmd FFF

字符串可能只是" AAA:BBB"或者它可以有10种这样的格式,直到" YYY:ZZZ"。 我的思路是从弦中制作一个阵列。首先,我将删除初始字符串中的所有最终空格,然后分离comas上的元素。结果将是:

Array[0]=AAA:BBB
Array[1]=CCC:DDD
.......
Array[n]=YYY:ZZZ

之后,我可以采取每个元素并尝试删除" *:",并留下:

Array[0]=BBB
Array[1]=DDD
.......
Array[n]=ZZZ

然后我可以将它们用作参数。我做了以下事情:

rem -- set string
set STRING=AAA:BBB, CCC:DDD, EEE:FFF

rem -- trim eventual spaces in STRING
set STRING=%STRING: =%

rem -- replaces comas with spaces to be able to create array
set STRING=%STRING:,= %

setlocal ENABLEDELAYEDEXPANSION

rem -- split string into array
set index=0
for %%A in (%STRING%) do (
  set Array[!index!] = %%A
  set /a index += 1
  )

分裂效果很好。但这就是我陷入困境的地方。我试着在过去几个小时内取出数组的每个元素并删除所有字符直到冒号,包括冒号。不确定我做错了什么,输出很奇怪。我尝试使用相同的,用于分割字符串,也运行带参数的脚本。分裂完成后,我尝试使用另一个。什么都行不通。

似乎命令:

set string=%string:*:=%
由于某些原因,

..对于数组的每个元素都不起作用。输出很奇怪,比如" stringn =%=%" 。我不明白为什么。相同的命令适用于非元素元素的其他变量。

有人有什么建议吗?非常感谢。

2 个答案:

答案 0 :(得分:2)

set "string=AAA:BBB, CCC:DDD, EEE:FFF"
for %%i in (%string%) do for /f "tokens=2 delims=:" %%j in ('echo %%i') do echo script.cmd %%j

答案 1 :(得分:2)

这是另一种方法:

@echo off
set "string=AAA:BBB, CCC:DDD, EEE:FFF"
for %%a in (%string::=\%) do echo script.cmd %%~nxa