要在批处理脚本中将字符串转换为数组,我写了一个小脚本
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]%
但是这个逻辑存在一些问题,因为只分配了第一个元素。我怎么能纠正这个。
答案 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