我有一个批处理文件,用户使用代码
设置其名称set /p name=
所以说他们把自己的名字命名为Mitchell然后我需要把它分成%char1%=M
和%char2%=i
等。
有谁知道怎么做?
答案 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