मेरे पास एक बैच फ़ाइल है जहां उपयोगकर्ता कोड का उपयोग करके अपना नाम सेट करता है

set /p name=

तो कहें कि उन्होंने अपना नाम मिशेल I के रूप में सेट किया है, फिर इसे %char1%=M और %char2%=i आदि में विभाजित करने की आवश्यकता है।

क्या किसी को भी यह करना आता है?

-2
Mitchell de Groot-Esler 31 अगस्त 2017, 06:48

2 जवाब

सबसे बढ़िया उत्तर

ऐसा करने के लिए वास्तव में युगल के तरीके हैं, यह इस पर निर्भर करता है कि आपको केवल पात्रों को संसाधित करने की आवश्यकता है या आपको उन्हें बाद के लिए संग्रहीत करने की आवश्यकता है, जैसा कि सुझाव दिया गया है।


मैं पहली विधि को सामने दिखाऊंगा क्योंकि यह स्ट्रिंग के भागों को संसाधित करने के लिए मेरा सामान्य उपयोग का मामला है (बस प्रत्येक भाग को संसाधित करने की आवश्यकता है और फिर इसे फेंक दें। यह पहला बिट सिर्फ परीक्षण कोड है इसे क्रिया में देखने के लिए।

    @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
0
paxdiablo 1 सितंबर 2017, 09:22

अगर आप 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
Mofi 1 सितंबर 2017, 08:20