如何批量拆分变量

时间:2017-08-31 03:48:48

标签: batch-file variables

我有一个批处理文件,用户使用代码

设置其名称
set /p name=

所以说他们把自己的名字命名为Mitchell然后我需要把它分成%char1%=M%char2%=i等。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

如果你可以使用来自char0的%char?%:

IF NOT DEFINED name GOTO :EOF
SETLOCAL EnableExtensions EnableDelayedExpansion
SET "left=!name!"
SET "len=0"

:loop
SET "left=!left:~0,-1!"
IF NOT "!left!"=="" SET /A "len+=1" && GOTO loop

FOR /L %%i IN (0,1,!len!) DO SET "char%%i=!name:~%%i,1!"

REM Other commands using char0 to charX. For verification output them all.
SET char & PAUSE

REM The environment variables char0 to charX do not exist anymore after next line.
ENDLOCAL

答案 1 :(得分:0)

实际上有 couple 这样做的方法,具体取决于您是否只需要处理字符,或者是否需要按照建议将它们存储起来。

我预先显示第一种方法,因为这是我处理字符串部分的常用用例(只需要处理每个部分然后扔掉它。这第一部分只是测试代码,看看它在行动。

    @setlocal enableextensions enabledelayedexpansion
    @echo off
    set name=Michael
    call :procWithCb :callback !name!
    endlocal
    goto :eof

:callback
    echo Character is %1
    goto :eof

:procWithCb
    set procWithCbStr=%2
:procWithCbLoop
    if not "!procWithCbStr!"=="" (
        call %1 !procWithCbStr:~0,1!
        set procWithCbStr=!procWithCbStr:~1!
        goto :procWithCbLoop
    )
    goto :eof

您将看到主位调用函数procWithCb,同时提供回调函数和要处理的字符串。它将依次从字符串中提取每个字符,并将其提供给回调(您可以随意制作复杂的),以便随意使用:

Character is M
Character is i
Character is c
Character is h
Character is a
Character is e
Character is l

第二种方法更类似于你所要求的,将每个字符存储到一个变量名称中,尽管我也为你设置了一个计数变量,以防你已经有变量形式集。第一位是相同的,除了它调用不同的处理路由并在之后输出所有创建的变量:

    @setlocal enableextensions enabledelayedexpansion
    @echo off
    set name=Michael
    call :procToVars !name!
    set character_
    endlocal
    goto :eof

:procToVars
    set procToVarsStr=%1
    set pos=0
:procToVarsLoop
    if not "%procToVarsStr%"=="" (
        set /a "pos = pos + 1"
        set character_count=!pos!
        set character_!pos!=!procToVarsStr:~0,1!
        set procToVarsStr=!procToVarsStr:~1!
        goto :procToVarsLoop
    )
    goto :eof

运行此脚本会显示结果:

character_1=M
character_2=i
character_3=c
character_4=h
character_5=a
character_6=e
character_7=l
character_count=7