मेरे पास एक बैच फ़ाइल है जहां उपयोगकर्ता कोड का उपयोग करके अपना नाम सेट करता है
set /p name=
तो कहें कि उन्होंने अपना नाम मिशेल I के रूप में सेट किया है, फिर इसे %char1%=M
और %char2%=i
आदि में विभाजित करने की आवश्यकता है।
क्या किसी को भी यह करना आता है?
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
अगर आप 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
संबंधित सवाल
नए सवाल
batch-file
एक बैच फ़ाइल एक पाठ फ़ाइल होती है जिसमें कमांड की एक श्रृंखला होती है जिसे MS-DOS, IBM OS / 2 या Microsoft Windows सिस्टम पर कमांड दुभाषिया द्वारा निष्पादित किया जाता है।