批量循环数组

时间:2013-04-23 15:36:59

标签: loops for-loop batch-file cmd

好的,这就是我所拥有的。

@echo off
setLocal EnableDelayedExpansion
:begin
set /a M=0
set /a number=0
set /p Input=You: 
echo %Input% >> UIS
for /F "tokens=1 delims= " %%i in ("%Input%") do (
    set /a M+=1
    set i!M!=%%i
)
del UIS 1>nul 2>nul
:loop
set /a number+=1
set invar=!i%number%!
echo %invar%
pause > nul
goto loop

比如说,输入字符串是“Lol这是我的输入字符串” 我希望for循环设置i!M!其中M = 1到“Lol”,其中M = 2 i!M!是“这个”,M = 3 i!M!是“是”等等。当然,现在,这不能永远持续下去,所以即使我必须在M = 25或其他什么时停下来,并说这个字符串只有23个字长。然后当M = 24和25然后我!M!只是空或未定义。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

for /f逐行阅读,而不是一字一句地阅读。

以下是How to split a string in a Windows batch file?提出的答案,并针对您的情况进行了修改:

@echo off
setlocal ENABLEDELAYEDEXPANSION

REM Set a string with an arbitrary number of substrings separated by semi colons
set teststring=Lol this is my input string
set M=0

REM Do something with each substring
:stringLOOP
    REM Stop when the string is empty
    if "!teststring!" EQU "" goto displayloop

    for /f "delims= " %%a in ("!teststring!") do set substring=%%a

    set /a M+=1
    set i!M!=!substring!

    REM Now strip off the leading substring
    :striploop
        set stripchar=!teststring:~0,1!
        set teststring=!teststring:~1!

        if "!teststring!" EQU "" goto stringloop

        if "!stripchar!" NEQ " " goto striploop

        goto stringloop

:displayloop
set /a number+=1
set invar=!i%number%!
echo %invar%
pause > nul
goto displayloop

endlocal

答案 1 :(得分:0)

for /F命令在明确的个令牌中划分一行,这些令牌必须通过不同的可替换参数(%% i,%% j等)一次处理。普通for命令在未定义的字数中划分一行(由空格,逗号,分号或等号分隔),这些字在迭代循环中逐个处理。这样,你只需要改变它:

for /F "tokens=1 delims= " %%i in ("%Input%") do (

这一个:

for %%i in (%Input%) do (

PS - 我建议你用标准格式编写数组,将下标括在方括号中;这样更清楚:

set i[!M!]=%%i

set invar=!i[%number%]!