2017-08-31 10 views
-2

ich eine Batch-Datei teilen, wo der Benutzer seinen Namen setzt den Code mitWie eine Variable in Batch

set /p name= 

so sagen, dass sie ihren Namen als Mitchell setze ich es dann müssen aufgeteilt in %char1%=M und %char2%=i werden usw.

Weiß jemand, wie man das macht?

+5

Können Sie Code für mich schreiben? – SteveFest

Antwort

0

Es gibt tatsächlich eine Paar von Möglichkeiten, dies zu tun, je nachdem, ob Sie nur die Zeichen verarbeiten müssen oder ob Sie müssen Speichern Sie sie für später, wie vorgeschlagen.


ich die erste Methode Vorderseite nach oben zeigen würde, da dies mein üblicher Anwendungsfall ist für Teile von Zeichenkette Verarbeitung (nur jedes Teil verarbeiten müssen dann wegwerfen. Das erste Bit ist nur Test-Code zu sehen, es in Aktion.

@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 

Sie werden sehen, dass der Haupt-Bit die Funktion procWithCb aufruft, zu verarbeiten, sowohl eine Callback-Funktion und die Zeichenfolge bereitstellt. Es wird jedes Zeichen aus dem String wiederum extrahiert, und das an die Callback geben (was Sie beliebig komplex machen können), damit es so geht, wie es Ihnen gefällt:

Character is M 
Character is i 
Character is c 
Character is h 
Character is a 
Character is e 
Character is l 

Die zweite Methode ist eher zu dem, was Sie gefragt haben, jedes Zeichen in einen Satz Variablennamen zu speichern, obwohl ich auch eine Zählvariable für Sie als auch für den Fall festgelegt haben Sie bereits Variablen dieser Form festgelegt. Das erste Bit ist mit Ausnahme identisch, dass es eine andere Verarbeitung Routing-Anrufe und gibt alle erstellten Variablen danach:

@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 

Ausführen dieses Skript Sie zeigt die Ergebnisse:

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

Wenn Sie% char verwenden% von 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

Danke für die Antwort Es wird geschätzt –

Verwandte Themen