2013-04-23 4 views
-1

Хорошо, вот что я имею.Batch For loop array

@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 это моя входная строка» Я хочу цикл, чтобы установить я! M! где M = 1 до «Lol», где M = 2 i! M! «это» и где M = 3 i! M! «есть» и так далее. Теперь, конечно, это не может продолжаться вечно, поэтому даже если мне нужно остановиться, когда M = 25 или что-то еще, и скажите, что строка была всего 23 слова. Тогда, когда M = 24 и 25, тогда i! M! просто null или undefined.

Любая помощь приветствуется, спасибо.

+0

Расскажите нам, что не работает в сценарии. –

+0

Ну, так как он только считывает первое слово из строки и не будет устанавливать значение M минус 1. –

ответ

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 
0

for /F команды разделить строку в определенном количества маркеров, которые должны быть обработаны сразу через различные заменяемые параметры (%% I , %% j и т. д.). Plain for команда делить строку в undefined количество слов (разделенных пробелом, запятой, точкой с запятой или равным знаком), которые обрабатываются один за другим в итеративном цикле. Таким образом, вам просто нужно изменить для:

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

этим одним:

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

PS - я предлагаю вам написать массив в стандартной форме, приложив индекс в квадратных скобках; это понятнее таким образом:

set i[!M!]=%%i 

или

set invar=!i[%number%]!