我有一個批處理文件,如果用戶使用的代碼如何分割批量可變
set /p name=
所以說,他們設置他們的名字爲米歇爾然後我需要它拆分成%char1%=M
和%char2%=i
將他們的名字等
有誰知道如何做到這一點?
我有一個批處理文件,如果用戶使用的代碼如何分割批量可變
set /p name=
所以說,他們設置他們的名字爲米歇爾然後我需要它拆分成%char1%=M
和%char2%=i
將他們的名字等
有誰知道如何做到這一點?
有實際上是這樣做的,這取決於你是否只需要處理的字符,還是你的方法一夫婦需要按照建議將它們存儲以備後用。
我將展示的第一個方法了前面,因爲這是我一貫的用例處理字符串的部分(只需要處理每一部分,然後把它扔掉,這第一位就是測試代碼,看看它在動作。
@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
如果能用%焦炭%來自char0:
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
感謝您的回答它是一個好評 –
你能爲我寫的代碼? – SteveFest