2017-08-31 74 views
-2

我有一個批處理文件,如果用戶使用的代碼如何分割批量可變

set /p name= 

所以說,他們設置他們的名字爲米歇爾然後我需要它拆分成%char1%=M%char2%=i將他們的名字等

有誰知道如何做到這一點?

+5

你能爲我寫的代碼? – SteveFest

回答

0

有實際上是這樣做的,這取決於你是否只需要處理的字符,還是你的方法一夫婦需要按照建議將它們存儲以備後用。


我將展示的第一個方法了前面,因爲這是我一貫的用例處理字符串的部分(只需要處理每一部分,然後把它扔掉,這第一位就是測試代碼,看看它在動作。

@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 
1

如果能用%焦炭%來自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 
+0

感謝您的回答它是一個好評 –