smiley
Goto Top

IF Befehl, wie funktioniert er?

Batch

Hi,

ich will mir eine Batch schreiben, in der man auf eine Frage mit einer von vier Zahlen antwortet und dann springt er zu dem Punkt.

...
ECHO Frage (0-3)
SET /p var=
CLS
ECHO.

IF /i var==0 GOTO null
IF /i var==1 GOTO eins
IF /i var==2 GOTO zwei
IF /i var==3 GOTO drei
...


Aber ich bekomm das nicht hin. Ich hoffe ihr helft mir.

MfG

Content-ID: 46913

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

Ausgedruckt am: 24.11.2024 um 06:11 Uhr

illuzione
illuzione 16.12.2006 um 21:46:18 Uhr
Goto Top
set choice=
set /P choice=Wahl: 
if not ´%choice%´==´´ set choice=%choice:~0,1%
if ´%choice%´==´0´ goto null
if ´%choice%´==´1´ goto eins
if ´%choice%´==´2´ goto zwei
if ´%choice%´==´2´ goto drei
mh der nimmt diese striche nicht

http://www.illuziown.org/code.txt
so solls aussehen

hoffe es hilft

mfg illu###e
Dani
Dani 16.12.2006 um 22:15:05 Uhr
Goto Top
Abend,
probier's mal so:
ECHO Frage (0-3)
SET /p var=
CLS
ECHO.

IF %var%==0 GOTO null
IF %var%==1 GOTO eins
IF %var%==2 GOTO zwei
IF %var%==3 GOTO drei
....

Gruß
Dani
Smiley
Smiley 17.12.2006 um 12:41:09 Uhr
Goto Top
set var=
set /P var=Wahl: 
if not ´%var%´==´´ set var=%var:~0,1%
if ´%var%´==´0´ goto null
if ´%var%´==´1´ goto eins
if ´%var%´==´2´ goto zwei
if ´%var%´==´2´ goto drei

Wenn antwort nicht gleich ist mit ´´, setzte var=%var:~0.1%??
if not ´%var%´==´´ set var=%var:~0,1%

Ich kenn mich nicht so gut aus, was macht dieser Befehl? (vllt. wenn eingabe nicht 0-3 dann versuchs nochmal?) Und warum die ganzen striche? (´)
Ich möchte auch gern wissen wie das mach das, wenn man nicht 0-3 eingegeben hat, das man das wiederholen kann und er ein Error ausgibt.
@Dani: Ich weiß garnicht warum ich das ganze nicht mit % versucht habe. Danke.

MfG
miniversum
miniversum 17.12.2006 um 13:24:39 Uhr
Goto Top
Da kannst du auch was anderes wie diese Striche nehmen. " oder drum herum geht auch.
Das mit der Abfrage wenn was anderes eingegeben wurde geht so dann:

:Frage
ECHO Frage (0-3)
SET /p var=
CLS
ECHO.

IF /i [%var%]== GOTO null
IF /i [%var%]==[1] GOTO eins
IF /i [%var%]==[2] GOTO zwei
IF /i [%var%]==[3] GOTO drei
echo Bitte nur 0 bis 3 eingeben
goto :Frage

miniversum
Smiley
Smiley 17.12.2006 um 13:49:41 Uhr
Goto Top
Danke, ihr habt mir sehr geholfen.

MfG
illuzione
illuzione 17.12.2006 um 14:06:17 Uhr
Goto Top
@echo off
:frage
set var=
set /P var=Wahl: 
if not [%var%]==; set var=%var:~0,1%
if [%var%]== goto null
if [%var%]==[1] goto eins
if [%var%]==[2] goto zwei
if [%var%]==[3] goto drei
echo Bitte nur 0 - 3 eingeben 
goto frage

:null 
echo Du bist bei Null
goto end
:eins
echo Du bist bei eins
goto end
:zwei
echo du bist bei zwei
goto end
:drei
echo du bist bei drei
goto end

:end
echo.
pause


1. nochmal übersichtlicher ohne diese "´" du kannst es genauso mit "[ , ]" oder "( , ) " machen.

2.
 if not [%var%]==; set var=%var:~0,1% 
Wenn %var% nicht leer ist, dann macht er mit denn ifs unten drunter weiter, ansonsten überspringt er die ifs und macht das was drunter steht, in dem Fall: er geht wieder zur Frage zurück.

3.
Ich möchte auch gern wissen wie das mach das, 
wenn man nicht 0-3 eingegeben hat, 
das man das wiederholen kann und er ein Error ausgibt.
So hätten wir auch das gelöst. Wenn du nichts eingibst beziehungsweise etwas falsches dann sagt er: "Bitte nur 0-3 eingeben" und fragt dich erneut.

Hoffe hat geholfen
mfg illu###e
Smiley
Smiley 17.12.2006 um 14:20:33 Uhr
Goto Top
Wenn es jemanden interessiert hier ist der Quellcode:

@ECHO off

TITLE Nachrichten verschicken.

:ja
CLS
ECHO.
ECHO Bitte gib jetzt den letzten Block der IP ein (192.168.0.[xxx]).
SET /p ip=192.168.0.
CLS
ECHO.
ECHO Bitte gib jetzt die Nachricht ein.
SET /p msg=
CLS
:Frage1
ECHO.
ECHO Wie oft soll die nachricht geschickt werden (0-3)? Bei 0 wird sie solange geschickt bis das Programm beendet wird.
SET /p var=
CLS

IF /i %var%==0 GOTO endless
IF /i %var%==1 GOTO eins
IF /i %var%==2 GOTO zwei
IF /i %var%==3 GOTO drei
ECHO.
ECHO Bitte nur 0 bis 3 eingeben.
GOTO :Frage1

ECHO.
ECHO Die Nachricht wird verschickt ...

:endless
net send %IP% %msg%
GOTO endless
:eins
net send %IP% %msg%
GOTO Frage2
:zwei
net send %IP% %msg%
net send %IP% %msg%
GOTO Frage2
:drei
net send %IP% %msg%
net send %IP% %msg%
net send %IP% %msg%
GOTO Frage2

CLS
:Frage2
ECHO.
ECHO Noch eine nachricht verschicken? (0-1)
SET /P frage=

IF /i %frage%==0 GOTO nein
IF /i %frage%==1 GOTO ja
ECHO.
ECHO Bitte nur 0 oder 1 eingeben.
GOTO :Frage2

:nein
END

Ein Problem hab ich noch, wenn ich das soweit benutze kommt immer der Fehler: Das senden von Dateien wird nicht länger unterstüzt. (an 127.0.0.1)

MfG
illuzione
illuzione 17.12.2006 um 14:50:04 Uhr
Goto Top
Hallo Smiley,

Der Nachrichtendienst müsste auf beiden Computern aktiviert sein um die "net send" Funktion verwenden zu können. Hast du diese vielleicht mit xp-Antispy deaktiviert? Falls du weitere Fragen hast müsstest du mal im Netzwerkbereich fragen, kenne mich da auch nicht so aus.

mfg illu###e
miniversum
miniversum 17.12.2006 um 16:17:35 Uhr
Goto Top
Da wirst du auch Probleme mit der IP bekommen.
Schau mal nach was in der Variablen %IP% steht.
desweiteren könntest du noch (ist einfach nur schöner udn ncith so fehleranfällig) die restliche IP die du abfrägst begrenzen auf die 255 udn auch kontrollieren das es ne Zahl ist.

miniversum
Smiley
Smiley 17.12.2006 um 16:41:45 Uhr
Goto Top
Kannst du mir da Tipps geben? Ich hab keine Ahnung wie ich das Limitiere.

Außerdem hab ich MIR die Nachrichten geschrieben und der Dienst ist an. (127.0.0.1)


MfG
miniversum
miniversum 17.12.2006 um 16:52:26 Uhr
Goto Top
if $IP% lss 256 then..
bzw.
if not $IP% lss 256 then..

schau doch mal die hilfe zum IF Befehl an.

miniversum
illuzione
illuzione 17.12.2006 um 17:03:42 Uhr
Goto Top
Hallo Smiley,
Die Variable %IP% - wenn ich mich nicht täusche - ist auch falsch.

@echo off

TITLE Nachricht

echo.
echo Bitte letzten IP Block eingeben:
set /P block4=
echo.
echo.
echo Die komplette IP lautet:
set IP=192.168.0.%block4%
echo %IP%
echo.
pause>NUL

Schau dir mal folgendes Beispiel an, hoffe es wird deutlich.

mfg illu###e
Smiley
Smiley 17.12.2006 um 18:07:43 Uhr
Goto Top
Nein das geht auch ohne diesen Umweg. Ich hab das auch in anderen Batchs so gemacht, da funktioniert es.

MfG
illuzione
illuzione 17.12.2006 um 18:22:51 Uhr
Goto Top
Hallo Smiley,
Ich widerspreche zwar sehr ungern aber es ist anders. Habe es extra nochmal ausprobiert.
Noch ein anderes Beispiel, welches in den obrigen Kommentaren irgendwo schonmal steht.
@echo off
:frage
set var=
set /P var=Wahl: 
if not [%var%]==; set var=%var:~0,1%
if [%var%]== goto null

Wenn es so wäre wie du es sagst, dann wäre %var%, wenn man Null eingeben würde: "Wahl:0". Aber dies ist nicht der Fall. %var% ist nämlich "0" und nicht "Wahl:0".
Probier es einfach mal aus.

RICHTIG:
@echo off

TITLE Nachricht

echo.
echo Bitte letzten IP Block eingeben:
set /P block4=
echo.
echo.
echo Die komplette IP lautet:
set IP=192.168.0.%block4%
echo %IP%
echo.
pause>NUL

FALSCH:
@echo off

TITLE Nachricht

echo.
echo Bitte letzten IP Block eingeben:
SET /p ip=192.168.0.
echo %IP%
echo.
pause>NUL

Du wirst sehen die Ausgaben unterscheiden sich.

mfg illu###e
illuzione
illuzione 17.12.2006 um 20:56:56 Uhr
Goto Top
Hallo Smiley,
Habe mir nochmal Zeit für diese Batch genommen. Hier ist der komplette Code.

@echo off
:start
cls
echo.
echo Bitte den 4. IP-Block eingeben.
set /P IP4=192.168.1.
set IP=192.168.1.%IP4%
cls
echo.
echo Bitte Nachricht eingeben
set /P MSG=
cls
echo Wieviel Mal soll die Nachricht versendet werden?
set choice=
set /P choice=Auswahl: 
if not [%choice%]== set choice=%choice:~0,1%
if [%choice%] ==[1] goto einmal
if [%choice%]==[2] goto zweimal
if [%choice%]==[3] goto dreimal
if [%choice%]== goto endlos

:endlos
net send %IP% %MSG%
goto endlos
:einmal
net send %IP% %MSG%
goto frage
:zweimal
net send %IP% %MSG%
net send %IP% %MSG%
goto frage
:dreimal
net send %IP% %MSG%
net send %IP% %MSG%
net send %IP% %MSG%
goto frage

:frage
cls
echo Noch eine Nachricht?
echo.
echo 1 = Ja
echo 0 = Nein
echo.
set choice2=
set /P choice2=Auswahl: 
if not [%choice2%]== set choice2=%choice2:~0,1%
if [%choice2%] ==[1] goto start
if [%choice2%] == goto nein
echo %choice2% ist keine gueltige Eingabe.
goto frage
:nein

Viel Spaß damit, ich hoffe es klappt alles.

Doch bevor ich Tschüss sage möchte ich mal wissen für was du diese Endlos-Schleife benötigst. Oder generell was bringt es jemanden drei mal die selbe Mittteilung zu senden?

Naja ist ja auch nicht meine Angelegenheit, meine Aufgabe habe ich erfüllt und ich hoffe ich habe geholfen. face-wink

mfg illu###e
Smiley
Smiley 18.12.2006 um 13:24:16 Uhr
Goto Top
Danke für eure Hilfe.
Bringen tut das nichts, klar. Es ist auch nur so ein Programm um IF befehle zu üben.
Die endlos Schleife ist dazu da Leute über LAN zu ärgern, wozu sonst? :D :D


MfG
Biber
Biber 18.12.2006 um 17:43:28 Uhr
Goto Top
Moin Smiley,

den letzten Post von Dir interpretiere ich mal so, dass dieses Lernziel erreicht ist und setze hier mal den grünen Haken und schließe diesen Thread.

Grüße
Biber