Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Richtige If not-Überprüfung

Frage Entwicklung Batch & Shell

Mitglied: kkboy94

kkboy94 (Level 1) - Jetzt verbinden

12.06.2010, aktualisiert 16:02 Uhr, 2856 Aufrufe, 8 Kommentare

Hallo Leute,

ein nächste Problem tut sich mir in meiner Batch-programmierung auf.
Ich poste einfach mal den betreffenden Code-Abschnitt
01.
:restart1 
02.
echo Sie haben eine falsche Auswahl getroffen.  
03.
echo Bitte die Auswahl wiederholen. 
04.
echo. 
05.
:cont 
06.
echo Auf Gro%ss%-/Kleinschreibung achten! 
07.
set /p question1=Sollen der Key und die Profile gesichert werden?(Ja/Nein):   
08.
if %question1%==Ja goto backup  
09.
if %question1%==Nein echo Sie haben %question1% gew%ae%hlt. 
10.
if not %question1%==Ja goto restart1 
11.
if not %question1%==Nein goto restart1 
12.
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.

Mit freundlichen Grüßen Karsten
Mitglied: bastla
12.06.2010 um 16:24 Uhr
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:
01.
:restart 
02.
set "question1=" 
03.
set /p question1=Sollen der Key und die Profile gesichert werden?(Ja/Nein):  
04.
if not defined question1 goto :restart 
05.
if /i %question1:~,1%==J goto :backup 
06.
echo Na gut, dann nicht ... 
07.
goto :eof 
08.
 
09.
:backup
Grüße
bastla
Bitte warten ..
Mitglied: kkboy94
12.06.2010 um 16:38 Uhr
Danke für die Anregung
Auf die Idee bin ich noch nicht gekommen


01.
if /i %question1:~,1%==J goto :backup 
Was bedeutet das "~,1%"?

Da ist noch etwas was mich verwirrt:
01.
if not defined question1 goto :restart 
Muss das question1 nicht als Variable mit % angegeben werden?
01.
if not defined %question1% goto :restart 
und das "goto :eof" kann ich dann durch meine eigen Sprungmarke ersetzen?


Dank nochmal

Mit freundlichen Grüßen Karsten
Bitte warten ..
Mitglied: bastla
12.06.2010 um 17:07 Uhr
Hallo kkboy!
Was bedeutet das "~,1%"?
Entspricht der Vorgangsweise im anderen Thread - außerdem lässt sich das durch ein
echo %question1:~,1%
relativ leicht nachvollziehen ...
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
Bitte warten ..
Mitglied: kkboy94
12.06.2010 um 21:57 Uhr
Funktioniert alles wunderbar. Wenn man dich nicht hätte.....
Vielen Dank bastla

> 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)?

Jap ich habs schon versucht, und wenn ich da Prozentzeichen hin gesetzt habe, ging er sofort zur Sprungmarke. Ist das einfach so, oder gibs da eine Begründung für? Aus reinem Interesse frag das jetzt mal.


PS: Ich wollt jetzt nicht unbedingt einen neuen Thread aufmachen, und außerdem gehörts auch ein wenig zum Thema dazu also hier meine nächste Frage:

Ich habe jetzt in meiner Batch zwei solcher Fragen. Nun hätte ich gerne Nach Abfrage dieser Fragen, eine Überprüfung, ob beide Fragen mit Nein beantwortet wurden, Wenn dies der Fall ist, soll halt eine bestimmte Ausgabe angezeigt werden. Soweit mein Versuch
01.
if %question1%==Nein ( 
02.
 if %question2%==Nein ( 
03.
echo Sie haben keine der beiden Aktionen gewaehlt. 
04.
echo Das Programm wird nun geschlossen. 
05.
ping localhost -n 5 >nul 
06.
exit 
07.
08.
09.
echo Beliebige Taste zum Beenden druecken. 
10.
pause >nul 
11.
exit
Bitte warten ..
Mitglied: bastla
13.06.2010 um 00:32 Uhr
Hallo kkboy!
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.
Es ist also nicht die Variable (mit Prozentzeichen), sondern der Name der Variablen anzugeben ...
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:
01.
set /p question=Aktion1? 
02.
if /i %question:~,1%==J goto :Aktion1 
03.
 
04.
set /p question=Aktion2? 
05.
if /i %question:~,1%==J goto :Aktion2 
06.
 
07.
echo Na dann nicht ... 
08.
pause 
09.
goto :eof 
10.
 
11.
:Aktion1 
12.
echo Aktion1 erledigt. 
13.
pause 
14.
goto :eof 
15.
 
16.
:Aktion2 
17.
echo Aktion2 erledigt. 
18.
pause 
19.
goto :eof
Weitere Alternative: Eine (Schalter-)Variable %Done% vorweg löschen und bei Ausführung einer Aktion mit einem (beliebigen) Wert versehen
set "Done=" 
... 
... 
echo Aktion 1 wird ausgefuehrt 
set "Done=True" 
... 
... 
echo Aktion 2 wird ausgefuehrt 
set "Done=True" 
... 
...
Am Ende kann dann per
if not defined Done echo Keine Aktion gewaehlt 
pause 
goto :eof
kontrolliert werden, ob der Schalter zumindest durch eine Aktion gesetzt wurde.

Grüße
bastla
Bitte warten ..
Mitglied: kkboy94
13.06.2010 um 11:22 Uhr
Hallo bastla,
#Meine Fragen
  • Wie füge ich deine erste Methode richtig in meinen untenstehenden Code ein?
  • Siehe weiter unten

01.
:restart1 
02.
echo Sie haben eine falsche Auswahl getroffen.  
03.
echo Bitte die Auswahl wiederholen. 
04.
echo. 
05.
:cont 
06.
set "question1=" 
07.
set /p question1=Sollen der Key und die Profile gesichert werden?(Ja/Nein):   
08.
if not defined question1 goto restart1  
09.
if /i %question1:~,1%==J goto backup  
10.
goto backupelse 
11.
 
12.
 
13.
:restart2 
14.
echo Sie haben eine falsche Auswahl getroffen.  
15.
echo Bitte die Auswahl wiederholen. 
16.
echo. 
17.
:backupelse 
18.
set "question2=" 
19.
set /p question2=Sollen die Profile wieder hergestellt werden?(Ja/Nein): 
20.
if not defined question2 goto restart2  
21.
if /i %question2:~,1%==J goto copy  
22.
 
23.
:copyelse 
24.
if /i %question1:~1%==J  
25.
 if /i %question2:~1%==J (  
26.
echo Sie haben keine der beiden Aktionen gewaehlt. 
27.
echo Das Programm wird nun geschlossen. 
28.
ping localhost -n 5 >nul 
29.
goto :eof 
30.
31.
echo Beliebige Taste zum Beenden druecken. 
32.
pause >nul 
33.
goto :eof
Soweit mein Code

nun hatte ich in meinem letzten Post meine Möglichkeit angeführt. Diese Möglichkeit habe ich noch etwas ausgefeilt und bin zu folgendem Ergebnis gekommen:
01.
if /i %question1:~1%==J  
02.
 if /i %question2:~1%==J (  
03.
echo Sie haben keine der beiden Aktionen gewaehlt. 
04.
echo Das Programm wird nun geschlossen. 
05.
ping localhost -n 5 >nul 
06.
goto :eof 
07.
08.
echo Beliebige Taste zum Beenden druecken. 
09.
pause >nul 
10.
goto :eof
Wenn ich bei den beiden Überprüfungsfragen jeweils nicht mit JA (oder ja, Ja, jA....) antworte sollte mir das Programm ja dann sagen, dass ich keine Aktion gewählt habe. Es zeigt mir aber für einen kurzen Augenblick nur "Syntaxfehler" und schließt dann sofort.
Ich weiß aber nicht welcher Syntaxfehler gemeint ist, oder wo ich den finde. Kannst du mir da auch noch bei helfen bastla?

Ich wäre dir sehr verbunden



Mit freundlichen Grüßen Karsten
Bitte warten ..
Mitglied: bastla
13.06.2010 um 13:40 Uhr
Hallo kkboy94!

Abgesehen davon, dass die Schreibweise für die Überprüfung nur des ersten Zeichens so
if /i %question1:~,1%==J
oder
if /i %question1:~0,1%==J
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:
01.
if /i not %question1:~,1%==J if /i not %question2:~,1%==J ( 
02.
    Keine Aktion gewaehlt. 
03.
)
Da die Eingaben aber eigentlich einem (Mini-)Menü entsprechen, könntest Du ja vielleicht eher so vorgehen:
01.
echo S = Key und die Profile sichern 
02.
echo W = Profile wieder herstellen 
03.
echo. 
04.
:cont 
05.
set "question1=" 
06.
set /p question1=Bitte  S  oder  W  eingeben:  
07.
if not defined question1 goto :cont 
08.
if /i %question1:~,1%==S goto :backup 
09.
if /i %question1:~,1%==W goto :copy 
10.
echo. 
11.
echo Sie haben keine der beiden Aktionen gewaehlt. 
12.
echo Das Programm wird nun geschlossen. 
13.
ping localhost -n 5 >nul 
14.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: kkboy94
13.06.2010 um 14:08 Uhr
So funktionierts prima. Dankeschön für die klasse Hilfe.

Ich glaube ich muss noch ein wenig an der Vereinfachung meiner Programmierung (falls man das so nennen kann) arbeiten. Ich mache ja anscheinend die Sachen komplexer als nötig.

Mit freundlichen Grüßen Karsten
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Virtualisierung
gelöst VMDK Datei vergrößern auf der Console welche Datei ist die richtige? (3)

Frage von fireskyer zum Thema Virtualisierung ...

Viren und Trojaner
gelöst RocketTab powered by Not site (8)

Frage von PizzaPepperoni zum Thema Viren und Trojaner ...

Windows Server
Erste Richtige It für Firma und Mich :) (16)

Frage von FirstZero zum Thema Windows Server ...

Multimedia & Zubehör
Suche das richtige Tablet für mich (10)

Frage von schrodti zum Thema Multimedia & Zubehör ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...