batch choice buchstaben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wäre ja blöd, wenn ein Befehl zum Auswählen von Buchstaben, immer beim Auswählen von Buchstaben Probleme hat.

Erkläre also dein Problem detailliert und am besten mit einem minimalen Codebeispiel, mithilfe dessen dein Problem reproduzierbar ist.

Jesaja01 
Fragesteller
 07.10.2018, 22:40

Bei Zahlen klappt es reibungslos aber bei Buchstaben verweist es mich eben auf eine andere Sprungmarke und kaum habe ich die Buchstaben mit Zahlen ausgetauscht funktioniert es. Ich hab schon eine Lösung und wollte vor allem wissen ob es da öfter mal Probleme gibt oder ob es doch an mir liegt.

0
timlg07  07.10.2018, 22:46
@Jesaja01
mit einem minimalen Codebeispiel, mithilfe dessen dein Problem reproduzierbar ist.

Ich kann dir deinen Fehler nicht sagen, wenn ich deinen Code nicht seh :)

0
Jesaja01 
Fragesteller
 14.10.2018, 22:50
@timlg07

Ok nach Tagen des Stresses und der Verdrängung hab ich mich nochmal drangesetzt und alles mögliche ausprobiert mit choice und Buchstaben.

Bei folgendem Code z.b. habe ich das Problem auch. (1) und (2) funktionieren ohne Probleme aber wenn ich (a) eingebe kommt nur "1" bei raus. Genau so ist es auch wenn ich es z.b. mit /c abc oder ähnlichem versuche es ist ls würde es die "if" Befehle einfach überspringen. Wenn ich nur Zahlen nehme funktioniert es auch ohne Probleme. Und eine komische Sache gibt es auch noch, am Anfang habe ich genau diesen Code benutzt wie er unten steht, aber dann ist es immer vor "choice" wieder zum Anfang gegangen, da hatte ich noch ein "pause" drin (das in der Klammer) daher weiß ich das so genau, denn es hat immer wieder nur pause ausgeführt und ist nie weiter gegangen (getestet mit einigen echo's und pause's) und erst als ich testweise das "a" durch eine Zahl ausgetauscht hatte kamm ich in dem Code "weiter" beim Ausführen, hatte dann aber immernoch das Problem wie oben genannt.

``@echo off

(pause)

:Start

choice /C 12a

if %ERRORLEVEL% EQU 1 goto 1

if %ERRORLEVEL% EQU 2 goto 2

if %ERRORLEVEL% EQU a goto a

:1

echo 1

goto Start

:2

echo 2

goto Start

:a

echo a

goto Start``

Keine Ahnung woran das liegen könnte! Vielleicht stehe ich auch einfach nur dermaßen auf dem Schlauch aber eben Keine Ahnung.

LG Jesaja

0
timlg07  15.10.2018, 12:06
@Jesaja01

xD

Manchmal ist es gar nicht so schlecht sich die cmd-Hilfe zu Befehlen anzuschauen, mit denen man Probleme hat, dort steht bei choice (/?):

  HINWEIS:
Die Umgebungsvariable ERRORLEVEL wird auf den Index des Schlüssels gesetzt, der aus dem Auswahlsatz ausgewählt wurde. Die erste Auswahl gibt einen Wert von 1, die zweite einen Wert von 2 usw.

Errorlevel = Fehler-/ Rückgabecode des zuletzt ausgeführten Befehls als Zahl. Du kannst zwar Errorlevel in den jeweiligen Buchstaben der Zahl als ASCII-Code umwandeln, CHOICE funktioniert aber anders. Kurzes Beispiel:

CHOICE /C xg5d2

-->

ERRORLEVEL  ZEICHEN
    1          x
    2          g
    3          5
    4          d
    5          2

Um wirklich das Zeichen zu bekommen kannst du folgendes machen:

set "message=Farbe waehlen: [R]ot [G]elb [B]lau"
set "choices=RGB"
:main
CHOICE /M "%message%" /C "%choices%"
set /a choice=%errorlevel%

if %choice% EQU 0   goto main
if %choice% EQU 255 goto main

set "char=!choices:~0,%choice%!"
set "char=!char:~-1!"

In %char% ist am Ende das Zeichen gespeichert, message hab ich mal als Variable genommen, kannst selbst definieren oder weglassen, choices sind die zur Auswahl stehenden Zeichen.

0
Jesaja01 
Fragesteller
 15.10.2018, 16:48
@timlg07

Wow xD ok korrigiere mich wenn ich falsch liege. Ich muss bei meinem Codebeispiel eigentlich nur in der dritten "if-Zeile" das erste "a" durch eine Drei austauschen?!

Danke schonmal!!

Aber wo du gerade ASCII angesprochen hast, wie kann ich die den mit Batch anzeigen (ohne einfach eine .txt Datei auszulesen, das würde zwar auh gehen wäre aber um einiges umständlicher). Also was ich da für eine Codepage nehmen kann, wenn das geht.

Nochmal Danke

LG Jesaja

1
timlg07  15.10.2018, 22:16
@Jesaja01

Also das was ich mit den ASCII-Codes meinte ist folgendes:

Der errorlevel ist ja normalerweise nur eine Zahl, kann aber auch als character (Zeichen) ausgegeben werden, verwende dazu

%=exitcodeAscii%

[ ! ] Macht bei CHOICE aber keinen Sinn, dafür verwende bitte den Code in meinem vorigen Kommentar.

Hier ein kleines Beispiel:

@echo off
for /L %%i in (33 1 126) do call :printChar %%i
pause&exit

:printChar ASCII<Number>
    cmd /C exit /B %1
    echo %errorlevel%  (%=ExitCode%)  =^>  ^%=exitcodeAscii%
exit /B

[ ! ] Manche Zeichen, zu denen %=exitcodeAscii% expandieren kann, müssen mit dem ^ escaped werden.

~Tim

1
Jesaja01 
Fragesteller
 16.10.2018, 20:50
@timlg07

Ok, damit kann ich jetzt aber nicht diese "Ungewöhnlichen Zeichen ausgeben" (─ │ ┌ ┐└) ?

1
timlg07  17.10.2018, 22:26
@Jesaja01

Ne ich denke nicht, dafür brauchst du ASCII-Codes im Bereich 170/190. Geht aber mit der BatBox Erweiterung. (und dann /a)

0

nein man kann alles eigentlich auswählen lassen...

Scriptbeispiel:

choice /N /C:WSDAH
if errorlevel 255 goto gui
if errorlevel 5 goto H
if errorlevel 4 goto A
if errorlevel 3 goto D
if errorlevel 2 goto S
if errorlevel 1 goto W
if errorlevel 0 goto gui

Lg Elias

Woher ich das weiß:eigene Erfahrung
Jesaja01 
Fragesteller
 07.10.2018, 21:09

Das schon aber ich habe immer heufig er Probleme wenn ich in Verbindung mit choice Buchstaben benutze z. B. Das ich auf eine andere Sprungmarke als angegeben geleitet werde

0
MrCommandBlock  07.10.2018, 21:25
@Jesaja01

äm ich verstehe nicht was du meinst! bei meinem Codebeispiel wird geprüft ob du auf WSDAH drückst und wenn du auf einer der beiden drückst dann kommst du auf die jeweilige Sprungmarke...

Erleutere mal genau dein Problem und schike den Code mit

2
Wahrhaftigkeit  16.05.2019, 15:50
@Jesaja01

Bei mir funktioniert gar nichts, wenn ich die Zahlen in Choice durch Buchstaben ersetze, falls Du dieses Problem meinst. und ich hab keine Ahnung, wie ich mit nur 10 Ziffern ein Auswahlmenü für 12 Programme auf die Reihe kriegen soll. ó.Ò

1
MrCommandBlock  16.05.2019, 18:27
@Wahrhaftigkeit

Ja so funktioniert das ja auch nicht!!! Versuch einfach mal den Code so wie ich ihn vor 221 Tagen geschrieben habe auszuführen. Dann hast du eine funktionierende Abfrage für die Tasten W,A,S,D.

Wenn du andere Tasten brauchst darfst du nicht die zahlen ändern, sondern nur oben den /c parameter

Dort alle Tasten hinterinandergeschrieben und mit errorlevel zählen, wenn die erste aufgeführte Taste gedrückt wird, wird Errorlevel 1 ausggeben bei der zweiten Errorlevel 2 usw...

1
Wahrhaftigkeit  21.05.2019, 16:56
@MrCommandBlock

Vor einigen Tagen kam ich durch kontinuierliches Probieren selbst drauf. Als ich diesen Thread hier schon vergessen hatte. Also passt auf, ich habs begriffen:

Wenn Du da ein Menü hast, sagen wir:

Spiel starten - drück A

Spiel laden/speichern - drück B

Mitwirkende - drück C

Beenden - Drück D

und du hast den Code, in diesem Falle:

choice /N /C:ABCD
if errorlevel 255 goto gui
if errorlevel 4 goto D
if errorlevel 3 goto C
if errorlevel 2 goto B
if errorlevel 1 goto A
if errorlevel 0 goto gui

Dann kannst Du bei C:, der Sektion, die dafür verantwortlich ist, dass nur diese Buchstabendrucke erkannt und eingegeben werden, weil sich halt sonst nix tut, die Buchstaben eingeben, bei ERRORLEVEL allerdings, und da liegt der Kniff, kannst du hinter errorlevel nur zahlen eingeben und nicht nur einziffrige, also auch zahlen Ü10 oder im dreistelligen bereich, ABER. Du musst sie so anordnen dass der kleinste zahlwert unten und der größte oben ist. So funktioniert das.

Oder wie Oma gesagt hätte, so lernt man aufm Bullen reiten. :D

Auf jeden Fall eine exorbitante Erleichterung, dass das jetzt funktionuckelt, denn ich bin in QBasic momentan arg beschäftigt, ein Text-Adventure zusammenzukalimpern und Melodien aus Midi-Dateien, tlw. mit Hilfe von MuseScore auszlesen/abzukomponieren/kopieren.

Das problem mit dos-midis ist dass nicht zwei töne gleichzeitig ausgegeben werden können ergo mussmer immer mal äugen wie Horch und Guck wie die noten sind und welche besonders wichtig sind vor das gesamtthema der melodie nicht immer ist die hauptmelodie das wichtigste zb wenn ein ton konstant mehrere sekunden lang geht mit midi hört sich ein konstanter ton an wie'n Griff ins Gemüse oder'n zug am katzenschwanz darum guck ich dann immer nach andren instrumenten die gleichzeitig spielen mit mehreren noten über den zeitraum des einen konstanten tons hinweg ich schreibe und schreibe ohne punkt und komma und komme zu keinem ende weil ich keinen blassen schimmer hab wie ichs wirklich treffend beschreiben soll.

Sagen wir, für mein Spiel lade ich eine ManyInstruments-Midi in Musescore, schau mir die Noten an und versuche das beste draus zu machen für eine Dos-Monoton-midi, wo mehrere Töne gleichzeitig nicht funzen möchten. Ich glaube, mit dieser vagen Umschreibung bin ich dem Geist des Dings noch am nächsten.

1
Jesaja01 
Fragesteller
 21.05.2019, 22:01
@Wahrhaftigkeit

Ist zwar schon ein bisschen her das ich die Frage gestellt habe, leider habe ich mittlerweile zu Java gewechselt, aber trotzdem danke für eure Erklärungen. Es würde mich nicht wundern wenn auch Andere dabei Hilfe brauchen (werden).

Und @MrCommandBlock es tut mir leid das ich mich "damals" nicht mehr gemeldet habe. Ehrlich gesagt weiß ich gar nicht mehr warum.

@Wahrhaftigkeit Ich drücke mich im Moment noch vor Sounds und Musik obwohl ich das warscheinlich auch bald brauchen werde, aber das hört sich ja interessant an.

LG Jesaja

1
Wahrhaftigkeit  22.05.2019, 23:38
@Jesaja01

Genau solches war mein Hauptantrieb beim Schreiben. :) Nicht selten wurden uralte Fragen und deren exakt ausformulierte Antworten zu unschätzbaren Hilfen für meinen Progress.

1