0

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

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]%

但是这种逻辑存在一些问题,因为只有第一个元素被分配。我该如何纠正这个。

4

2 回答 2

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以获得全面的解释。

于 2013-09-10T17:05:43.990 回答
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
于 2013-09-11T00:58:17.560 回答