-1

さて、ここに私が持っているものがあります。

@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 this is my input string」だったとします。for ループで i!M! を設定します。ここで、M = 1 から「笑」、M = 2 i!M! ここで、M = 3 i!M! は「これ」です。は「である」などです。もちろん、これが永遠に続くわけではありません。たとえ、M = 25 か何かで停止し、文字列の長さが 23 語しかなかったとしてもです。次に、M = 24 および 25 の場合、i!M! 単に null または未定義です。

どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

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
于 2013-04-23T16:15:35.540 に答える
0

for /Fコマンドは、異なる置き換え可能なパラメーター (%%i、%%j など) を介して一度に処理する必要がある一定数のトークンに行を分割します。単純forなコマンドは、反復ループで 1 つずつ処理される定義されていない数の単語 (スペース、コンマ、セミコロン、または等号で区切られた) で行を分割します。このように、これを次のように変更するだけです。

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

これによって:

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

PS - 添字を角括弧で囲んで、標準形式で配列を記述することをお勧めします。この方法はより明確です:

set i[!M!]=%%i

また

set invar=!i[%number%]!
于 2013-04-23T22:40:58.483 に答える