Richtige If not-Überprüfung
Hallo Leute,
ein nächste Problem tut sich mir in meiner Batch-programmierung auf.
Ich poste einfach mal den betreffenden Code-Abschnitt
Das Problem ist jetzt folgendes. Wenn ich nun "Nein" eingebe (was an sich eigentlich richtig ist), sagt mir die Batch, dass die Auswhal falsch getroffen ist. Ich habe auch schon geprüft ob ich etwas in dem Programmcode an der Rechtschreibung falsch gemacht hab, aber dem war nicht so.
Vielleicht gibt es ja auch noch andere Wege, die Auswahl wiederholen zu lassen, wenn die Eingabe mit keiner der beiden Möglichkeiten übereinstimmt.
Ich hoffe ihr könnt mir helfen.
MfG Karsten
ein nächste Problem tut sich mir in meiner Batch-programmierung auf.
Ich poste einfach mal den betreffenden Code-Abschnitt
:restart1
echo Sie haben eine falsche Auswahl getroffen.
echo Bitte die Auswahl wiederholen.
echo.
:cont
echo Auf Gro%ss%-/Kleinschreibung achten!
set /p question1=Sollen der Key und die Profile gesichert werden?(Ja/Nein):
if %question1%==Ja goto backup
if %question1%==Nein echo Sie haben %question1% gew%ae%hlt.
if not %question1%==Ja goto restart1
if not %question1%==Nein goto restart1
goto backupelse
Das Problem ist jetzt folgendes. Wenn ich nun "Nein" eingebe (was an sich eigentlich richtig ist), sagt mir die Batch, dass die Auswhal falsch getroffen ist. Ich habe auch schon geprüft ob ich etwas in dem Programmcode an der Rechtschreibung falsch gemacht hab, aber dem war nicht so.
Vielleicht gibt es ja auch noch andere Wege, die Auswahl wiederholen zu lassen, wenn die Eingabe mit keiner der beiden Möglichkeiten übereinstimmt.
Ich hoffe ihr könnt mir helfen.
MfG Karsten
Please also mark the comments that contributed to the solution of the article
Content-ID: 144711
Url: https://administrator.de/contentid/144711
Printed on: November 11, 2024 at 11:11 o'clock
8 Comments
Latest comment
Hallo kkboy94!
Warum willst Du Deine Benutzer zu einer Eingabe "Nein" zwingen? Zumeist wird es genügen, festzustellen, ob überhaupt etwas eingegeben wurde (um ein irrtümliches Enter abzufangen) und falls ja, ob sich daraus ein "Ja" ableiten lässt - also etwa:
Grüße
bastla
Warum willst Du Deine Benutzer zu einer Eingabe "Nein" zwingen? Zumeist wird es genügen, festzustellen, ob überhaupt etwas eingegeben wurde (um ein irrtümliches Enter abzufangen) und falls ja, ob sich daraus ein "Ja" ableiten lässt - also etwa:
:restart
set "question1="
set /p question1=Sollen der Key und die Profile gesichert werden?(Ja/Nein):
if not defined question1 goto :restart
if /i %question1:~,1%==J goto :backup
echo Na gut, dann nicht ...
goto :eof
:backup
bastla
Hallo kkboy!
relativ leicht nachvollziehen ...
Grüße
bastla
Was bedeutet das "~,1%"?
Entspricht der Vorgangsweise im anderen Thread - außerdem lässt sich das durch einecho %question1:~,1%
Muss das question1 nicht als Variable mit % angegeben werden?
Gegenfrage: Kannst Du Dir einen vernünftigen Grund vorstellen, warum ich die Prozentzeichen dann nicht gesetzt hätte? Abgesehen davon: Was hat Dein diesbezüglicher Test ergeben (Du hast es doch sicher schon versucht)?und das "goto :eof" kann ich dann durch meine eigen Sprungmarke ersetzen?
Völlig richtig (wenn Du es beibehieltest, würde der Batch beendet).Grüße
bastla
Hallo kkboy!
Es ist also nicht die Variable (mit Prozentzeichen), sondern der Name der Variablen anzugeben ...
An sich spricht nicht viel gegen Deine beiden "
Falls ohnehin nur eine der beiden abgefragten Aktionen ausgeführt werden könnte, böte sich auch "
Weitere Alternative: Eine (Schalter-)Variable %Done% vorweg löschen und bei Ausführung einer Aktion mit einem (beliebigen) Wert versehen
Am Ende kann dann per
kontrolliert werden, ob der Schalter zumindest durch eine Aktion gesetzt wurde.
Grüße
bastla
Ist das einfach so, oder gibs da eine Begründung für? Aus reinem Interesse frag das jetzt mal.
Ja - aus der Hilfe zu "if
":Die Bedingung DEFINED arbeitet genau wie EXIST, bezieht sich aber auf
den Namen einer Umgebungsvariablen und ist wahr, wenn die Umgebungs-
variable definiert ist.
An sich spricht nicht viel gegen Deine beiden "
if
" (die Klammer nach dem ersten ist allerdings nicht nötig, und das "exit
" - wenn es, wie hier, nicht dazu dient, per "/b" einen Errorlevel zurückzuliefern - würde ich durch ein "goto :eof
" ersetzen).Falls ohnehin nur eine der beiden abgefragten Aktionen ausgeführt werden könnte, böte sich auch "
goto
" an - schematisch etwa so:set /p question=Aktion1?
if /i %question:~,1%==J goto :Aktion1
set /p question=Aktion2?
if /i %question:~,1%==J goto :Aktion2
echo Na dann nicht ...
pause
goto :eof
:Aktion1
echo Aktion1 erledigt.
pause
goto :eof
:Aktion2
echo Aktion2 erledigt.
pause
goto :eof
set "Done="
...
...
echo Aktion 1 wird ausgefuehrt
set "Done=True"
...
...
echo Aktion 2 wird ausgefuehrt
set "Done=True"
...
...
if not defined Done echo Keine Aktion gewaehlt
pause
goto :eof
Grüße
bastla
Hallo kkboy94!
Abgesehen davon, dass die Schreibweise für die Überprüfung nur des ersten Zeichens so
oder
aussehen müsste, würdest Du auch eine UND-Verknüpfung für ein zweimaliges "J" durchführen, anstatt auf "NICHT UND NICHT" zu prüfen - daher allenfalls:
Da die Eingaben aber eigentlich einem (Mini-)Menü entsprechen, könntest Du ja vielleicht eher so vorgehen:
Grüße
bastla
Abgesehen davon, dass die Schreibweise für die Überprüfung nur des ersten Zeichens so
if /i %question1:~,1%==J
if /i %question1:~0,1%==J
if /i not %question1:~,1%==J if /i not %question2:~,1%==J (
Keine Aktion gewaehlt.
)
echo S = Key und die Profile sichern
echo W = Profile wieder herstellen
echo.
:cont
set "question1="
set /p question1=Bitte S oder W eingeben:
if not defined question1 goto :cont
if /i %question1:~,1%==S goto :backup
if /i %question1:~,1%==W goto :copy
echo.
echo Sie haben keine der beiden Aktionen gewaehlt.
echo Das Programm wird nun geschlossen.
ping localhost -n 5 >nul
goto :eof
bastla