好的,这就是我所拥有的。
@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!只是空或未定义。
感谢任何帮助,谢谢。
答案 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%]!