kevink92
Goto Top

Unterscheiden von Zahlen und Buchstaben im Batch-Script

Hallo zusammen

Also ich habe mich auch daran versucht ein Script zu basteln was zwischen Zahlen und Buchstaben unterscheidet. Nur leider klappt das nicht so ganz. Also das Script funktioniert in der Ausführung aber es schreibt halt nicht die gewünschte Antwort hin.

Villeicht könnt ihr ja mal drüber schauen

@echo off
echo Bitte geben sie etwas ein:
set /p var=
set /a "var2=%var%+5"

if %var2% == "5" ( echo Buchstaben) else ( echo Zahl)

pause


Wenn ich dann dort ein Wort eingebe kommt als Antwort dann Zahl was aber ja eig nicht so ist, weil dann dort das Ergebnis 5 rauskommen müsste.


schon mal Danke im vorraus.

Content-Key: 141039

Url: https://administrator.de/contentid/141039

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: miniversum
miniversum 20.04.2010 um 12:55:35 Uhr
Goto Top
Versuchs mal so:
@echo off
echo Bitte geben sie etwas ein:
set /p var=
set /a var2=%var%+0

if %var% == 0 ( echo Zahl) else (if %var2% == 0 ( echo Buchstaben) else ( echo Zahl))
Mitglied: 86263
86263 20.04.2010 um 12:58:18 Uhr
Goto Top
Eine sehr interessante Art, das zu überprüfen face-smile Wenn du diesen Quelltext behalten willst dann lasse bei der 5 die Anführungszeichen weg.
Mitglied: KeViNK92
KeViNK92 20.04.2010 um 13:10:32 Uhr
Goto Top
das ist jetzt ein bisschen verwirrend für mich hast du den anfang bei if genommen, damit das ergebnis 0 auch rauskommen kann? oder warum hat mein if nicht funktioniert? Habe das mit der 5 ohne " " getestet, hat aber auch nicht funktioniert. Miniversum bei dir hats geklappt mit der hilfe, möchte bloß halt gerne eine kurze Erläuterung dazu.
Mitglied: 86263
86263 20.04.2010 um 13:38:16 Uhr
Goto Top
ja am Anfang steht if damit auch eine 0 eingegeben werden kann. Danach ist das eigentlich das selbe was du schon hattest nur das miniversum keine 5 - wie du - sondern eine 0 benutzt hat. Wie du siehst hat auch er keine Anführungszeichen bei der 0 deshalb kann ich mir nicht vorstellen, dass mein Vorschlag nicht funktioniert hat.

@echo off
echo Bitte geben sie etwas ein:
set /p var=
set /a "var2=%var%+5"  

if %var == 5 (echo Zahl) else (if %var2% == "5" ( echo Buchstaben) else ( echo Zahl))  

pause

Ist das selbe
Mitglied: KeViNK92
KeViNK92 20.04.2010 um 16:13:49 Uhr
Goto Top
ok vielen Dank ^^ Also war ja mein eigener Lösungsansatz gar nicht mal so falsch. Das beruhigt mich schon mal.

Jedenfalls funktioniert das jetzt super
Mitglied: bastla
bastla 20.04.2010 um 16:55:33 Uhr
Goto Top
Jedenfalls funktioniert das jetzt super
... zumindest, bis sich jemand den Spaß erlaubt, zB "09" oder "0A" (jeweils mit Null als erster Stelle) einzugeben ...

Grüße
bastla
Mitglied: miniversum
miniversum 20.04.2010 um 18:38:08 Uhr
Goto Top
Was mir grade auffällt, du kannst es auch darauf vereinfachen:
@echo off
echo Bitte geben sie etwas ein:
set /p var=
set /a var2=%var%+0
if %var2% == %var% ( echo Zahl) else ( echo Buchstaben)
Mitglied: bastla
bastla 20.04.2010 um 19:08:54 Uhr
Goto Top
Hallo @all!

Spätestens wenn auch noch Anführungszeichen ins Spiel kommen, wird es (für Nicht-Biber face-wink) so gut wie unmöglich, eine Eingabe in Batch abzusichern - trotzdem noch ein Ansatz:
@echo off & setlocal
echo Bitte geben sie etwas ein:
set /p var=
if not defined var echo Leere Eingaben werden nicht ausgewertet! & goto :eof

set "Text="  
set /a Pos=0
:Loop
call set "Zeichen=%%var:~%Pos%,1%%"  
if "%Zeichen%"=="" goto :Done  
echo 0123456789|findstr /l /c:"%Zeichen%">nul||set "Text=True"  
set /a Pos+=1
if not defined Text goto :Loop
:Done
if defined Text (echo Buchstaben) else (echo Zahl)
Grüße
bastla
Mitglied: Biber
Biber 20.04.2010 um 20:20:56 Uhr
Goto Top
Na ja, bastla,

so einfach ist das nicht, die offenen Flanken der CMD.exe abzusichern...
Dieses Stück Software haben doch die RedmonderInnen zusammengeschrotet.

Und was die alles verscharchen können, da kommen nur ganz Einfühlsame drauf.
Beispiel mit Kölnisch Wasser

>set z1=4711odekolonnje

(=20:13:59  D:\temp=)
>set /a z1+9
4720

Denen reicht es völlig, wenn eine Variable mit einer Ziffer anfängt, dann ist es doch logischerweise eine Zahl, oder?

Ich weiss nicht, ob die in Redmond auch so einen schiefen Turm haben wie in PISA....
Aber dagegen wetten würde ich auch nicht.

Grüße
Biber
Mitglied: bastla
bastla 20.04.2010 um 21:55:47 Uhr
Goto Top
@Biber
Sieht zumindest schön flüssig aus face-wink - was sich aber, wie auch in miniversums Batch, radikal ändert, wenn man/frau/kind die (in diesem Fall allerdings bekannter Maßen unnötigen) Prozentzeichen für die Variablenschreibweise verwendet:
D:\TEMP>set z1=4711odekolonnje

D:\TEMP>set /a %z1%+9
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
Grüße
bastla
Mitglied: Biber
Biber 20.04.2010 um 22:10:45 Uhr
Goto Top
@bastla

Dann wiederum hat die mitgelieferte Hilfe zu Set (Set /?) den Wahrheitsgehalt von Kohl'schen Memoiren:

Dort steht u.a.
> Set /?
...
nicht-nummerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von
Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen
konvertiert werden. Wenn eine Umgebungsvariable angegeben wird, die nicht
definiert ist, wird für diese der Wert Null verwendet. Somit können Sie
mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben,
um deren Werte zu erhalten. Wenn der Befehl SET /A von der Befehlszeile,
d.h. außerhalb eines Befehlsskripts ausgeführt wird, dann zeigt er
den endgültigen Wert des Ausdrucks an. Der Zuordnungsoperator erfordert

Und ich sehe am Ende des Satzes "Somit können Sie mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben, um deren Werte zu erhalten." beim besten Willen kein "außer wenn" oder "allerdings" oder "Angaben ohne Gewähr".

Aber was soll's.... wahrscheinlich ist in Redmond die Auswahl an möglichen PraktikantInnen nicht so gewaltig... face-wink

Grüße
Biber