在批处理脚本中将字符串转换为数组

时间:2013-09-10 16:57:17

标签: batch-file

要在批处理脚本中将字符串转换为数组,我写了一个小脚本

setlocal enableextensions enabledelayedexpansion
echo run

set sentence=a~b~c

set /a i=0

for /f "tokens=1,2,3 delims=~" %%a in ("%sentence%") do (
   set /a i+=1
   set array[!i!]=%%a
)

echo %array[1]%
echo %array[2]%

但是这个逻辑存在一些问题,因为只分配了第一个元素。我怎么能纠正这个。

2 个答案:

答案 0 :(得分:3)

FOR命令将变量的内容解析为连续变量%a%b%c ...

阅读帮助并尝试,在您的情况下,

for /f "tokens=1,2,3 delims=~" %%a in ("%sentence%") do (
   set array[1]=%%a
   set array[2]=%%b
   set array[3]=%%c
)
echo %array[1]%
echo %array[2]%

对于更通用的解析器循环,您需要一种非常棘手的技术,将分隔符更改为行分隔符。请参阅此SO答案https://stackoverflow.com/a/12630844/30447以获得全面的解释。

答案 1 :(得分:2)

如果你可以用空格分隔字符串,这应该适合你。

@echo off
setlocal ENABLEDELAYEDEXPANSION
REM String, with words separated by spaces
set sentence=x y z

set index=0
for %%A in (%sentence%) do (
    set Array[!index!] = %%A
    set /a index += 1
)

echo.There are %index% words
set Array

输出:

F:\scripting\stackoverflow>s2a2.cmd
There are 3 words
Array[0] = x
Array[1] = y
Array[2] = z