Top-Themen

Aktuelle Themen (A bis Z)

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 unverständlicher if-Abfrage-Fehler

Mitglied: halo7one

halo7one (Level 1) - Jetzt verbinden

18.05.2008, aktualisiert 19.05.2008, 4694 Aufrufe, 14 Kommentare

if ... if not ... () funktioniert nicht (immer)?

Hi @ all,
ich habe ein Problem mit einer if-Abfrage und kann mir nicht erklären, warum diese in einem Fall funktioniert und im anderen nicht...

dies geht nicht:
01.
if "%1"=="end" if not %2!==! (
02.
set "option=%2"
03.
echo  w„hle:%2 (nach angegebenem Parameter^)
04.
) else set /p option= w„hle:
Anmerkung: die Klammern beim echo spielen keine Rolle,
genau so " oder andere Zeichen als ! bei der if-Abfrage (z.B. if not "%2x"=="x"),
das Problem liegt nur bei den beiden if's ZUSAMMEN, der Rest geht!

dies funktioniert hingegen:
01.
if "%end2%"=="ja" if not "%name2%"=="" (
02.
echo %endmessage% %name2%
03.
%end-cmd2%
04.
set "end2="
05.
if errorlevel=1 (echo !! Fehler !!
06.
) else echo =^> fertig
07.
echo ###############################################################################
08.
echo.
09.
) else echo ES KLAPPT!
ich habe zwar auch schon die Lösung des Problems gefunden: einfach 2 Klammern mehr
01.
if "%1"=="end" ( if not %2!==! (
02.
set "option=%2"
03.
echo  w„hle:%2 (nach angegebenem Parameter^)
04.
)) else set /p option= w„hle:
ich kann mir jedoch nicht erklären, was an diesen beiden if-Abfragen so unterschiedlich sein soll?!

Also an alle die sich damit gut auskennen: Warum funktioniert die if-Abfrage einmal ohne Extra-Klammern und einmal nur mit diesen?
Mitglied: derJules
18.05.2008 um 19:57 Uhr
was ist denn das für eine Sprache?

Ich würde einfach mal behaupten, es liegt ganz einfach an der Sprachsyntax - für mich klingt's irgenwie logisch, dass man in diversen programmiersprachen den if-Verarbeitungsteil in Klammern setzten muss - und dass machst du ja im ersten nicht, da hat das erste if ja keine klammern...
Bitte warten ..
Mitglied: Biber
18.05.2008 um 19:59 Uhr
Moin halo7one,

Du hast nur die schließende runde Klammer in Zeile 3 maskiert, nicht die öffnende.
Wenn Du das nachholst, dann sollte es gehen.
01.
::------snipp testif.cmd--------
02.
@echo off & setlocal
03.
if "%1"=="end" if not %2!==! (
04.
set "option=%2"
05.
echo  wähle:%2 ^(nach angegebenem Parameter^)
06.
) else set /p option= wähle:
Demo am CMD-Prompt:
01.
>testif end bla
02.
 wähle:bla (nach angegebenem Parameter)
03.

04.
(=19:52:52  d:\hfr\temp=)
05.
>testif end
06.
wähle:
Grüße
Biber
Bitte warten ..
Mitglied: TuXHunt3R
18.05.2008 um 22:06 Uhr
@ derJules

was ist denn das für eine Sprache?

Windows Batch. Noch nie gebraucht?
Bitte warten ..
Mitglied: halo7one
18.05.2008 um 23:29 Uhr
nabend...

@ Biber:
Du hast nur die schließende runde
Klammer in Zeile 3 maskiert, nicht die
öffnende.
Wenn Du das nachholst, dann sollte es
gehen.
01.
::------snipp
02.
> testif.cmd--------
03.
> @echo off & setlocal
04.
> if "%1"=="end" if not
05.
> %2!==! (
06.
> set "option=%2"
07.
> echo  wähle:%2 ^(nach angegebenem
08.
> Parameter^)
09.
> ) else set /p option= wähle:
10.
> 

Danke für die Überlegung, doch ich dachte ich hätte mit meiner Anmerkung diese Antworten verhindert, da ich wusste, dass jemand den Fehler bei diesen Klammern sucht:
Anmerkung: die Klammern beim echo spielen keine Rolle,
Das bedeutet, dass auch dies nicht funktioniert:
01.
if "%1"=="end" if not %2!==! (
02.
set "option=%2"
03.
echo  w„hle:%2 nach angegebenem Parameter
04.
) else set /p option= w„hle:
trotzdem thx
Bitte warten ..
Mitglied: Biber
18.05.2008 um 23:47 Uhr
Moin halo7one,

auch Dein jetzt gepostetes Beispiel läuft bei mir ohne Probleme.
Egal ob ohne, mit einem oder mit zwei Parametern aufgerufen.

Frage: wenn dieser Zweig aufgerufen wird mit Parameter %1 gleich "end" -was steht dann in %2?
Oder bringen die bei Dir angezeigten Hochkomma-statt-kleines-ä-Codepage-Fehler den Batch bei Dir durcheinander? Tritt dieser Fehler bei Dir auch auf, wenn Du testweise "waehle" statt "wähle" schreibst?

Grüße
Biber
Bitte warten ..
Mitglied: halo7one
19.05.2008 um 00:39 Uhr
Was? das geht bei dir?
Wenn du eine bat-Datei mit folgendem Inhalt startest, dann kommt eine Eingabeaufforderung (set /p) zu Stande?:
01.
if "%1"=="end" if not %2!==! (
02.
set "option=%2"
03.
echo  w„hle:%2 nach angegebenem Parameter
04.
) else set /p option= w„hle:
also bei mir geht das nicht, und ich muss gerade feststellen, dass sogar dies nicht geht:
01.
if "test"=="end" (pause) else echo test
02.
if "test"=="end" pause else echo test
(womit sich deine Frage nach dem Hochkomma-statt-kleines-ä-Codepage-Fehler erübrigt).

das geht aber:
01.
if "test"=="test" pause else echo test
02.

03.
:: hier geht sogar alles!!!
04.
if "%1"=="end" ( if not %2!==! (
05.
set "option=%2"
06.
echo  w„hle:%2 (nach angegebenem Parameter^)
07.
)) else set /p option= w„hle:
Der Fehler liegt also beim else! Also: WARUM funktioniert else (bei mir) nicht richtig?
Ich mein wie sollte ich den letzten Code denn anders schreiben?

Wenn genau das so bei dir klappt dann hab ich ein Stapelverarbeitungs-Bug, was dann wohl die letzte logische Erklärung wäre, oder?
Wenn ja, wie schaffe ich diesen Bug aus der Welt? (bitte nicht formatieren, reparieren würde ich auch nur ungern)
Bitte warten ..
Mitglied: bastla
19.05.2008 um 01:10 Uhr
Hallo halo7one!

Falls es Dich interessiert: Bei mir funktioniert
01.
@echo off & setlocal
02.
if "%1"=="end" if not %2!==! (
03.
    set "option=%2"
04.
    echo  w„hle:%2 nach angegebenem Parameter
05.
) else set /p option= w„hle:
06.
echo Option: %option%
und
01.
if "test"=="end" (pause) else echo test
sowie
01.
if "test"=="test" (pause) else echo test
jeweils wie vorgesehen (wobei ich allerdings für die Abfrage nach %2 anstelle von "!" trotzdem eher ein oder zwei andere Zeichen verwenden würde - vielleicht brauchst Du ja auch noch "delayedexpansion" ...).

Damit ggf beim Aufruf "end" auch tatsächlich unter Anführungszeichen geschrieben werden kann, wäre noch folgende Änderung zu empfehlen:
01.
if "%~1"=="end" if not %2!==! (
bzw (im Hinblick auf die "!")
01.
if "%~1"=="end" if not "%~2"=="" (
Nun aber noch zu Deiner ursprünglichen Frage hinsichtlich des zusätzlichen Klammernpaares:
ich kann mir jedoch nicht erklären, was an diesen beiden if-Abfragen so unterschiedlich sein soll?!
Wenn Du
01.
if "%1"=="end" if not %2!==! (
schreibst, bezieht sich das "else" auf das zweite "if" (also die Abfrage nach Parameter 2). Verwendest Du jedoch folgende Schreibweise:
01.
if "%1"=="end" ( if not %2!==! (
gilt das "else" für das erste "if", also für die Frage, ob "end" als erster Parameter übergeben wurde.

Grüße
bastla
Bitte warten ..
Mitglied: halo7one
19.05.2008 um 12:33 Uhr
Moin Bastla,
NUN BIN ICH TOTAL GENERFT!!!!! Ich habe gerade die Antwort auf dieses Problem wunderbar ausführlich posten wollen. Doch als ich den Beitrag senden wollte MUSSTE ICH MICH NEU ANMELDEN = ICH KANN DEN BEITRAG NOCHMAL SCHREIBEN!!!!!!

Da ich jetzt aber absolut keinen Bock mehr darauf habe bitte ich euch (vor allem dich Bastla):
Wartet auf meinen Beitrag bevor ihr etwas schreibt!
Es kann ne Weile dauern, bis ich 1. wieder die entnerft bin und Zeit habe sowie 2. den Beitrag wieder zusammen bekommen habe.

Bis dahin verfluche ich den relogin, Firefox (keine Formulardaten gespeichert) und mich, da ich nicht manuell gesichert habe XD

So gebe ich jedem, der einen längeren Beitrag schreibt den Rat: ZWISCHENSPEICHERN!!!!

Mit schlechter Laune,
halo7one
Bitte warten ..
Mitglied: halo7one
19.05.2008 um 16:51 Uhr
Moin Bastla,
Erst mal danke für die Erklärung, Meine Klammern-frage wäre damit geklärt

Auch die simple if...else Abfrage funktioniert nun bei mir wieder!
Also: wenn bei jemandem einmal etwas nicht funktioniert, als erstes den PC neustarten ;)

Nun war meine Idee bei der (folgenden) if-Abfage jedoch, dass sich das else auf beide if's bezieht, was jedoch so nicht möglich ist, oder?:
01.
@echo off & setlocal
02.
if "%~1"=="end" if not "%~2"=="" (
03.
    set "option=%~2"
04.
    echo  w„hle:%~2 ^(nach angegebenem Parameter^)
05.
) else set /p option= w„hle:
06.
echo Option: %option%
07.
pause
Beschreibung: das else bezieht sich hier nur auf das 2. if! (Wenn ich die Zusatzklammer einbaue, bezieht es sich nur auf das 1. if.)
1. Fall: kein Parameter = Da die 1. if-Abfrage negativ ist, wird die 2. gar nicht erst ausgeführt und somit auch nicht das else, was jedoch meine Idee war. (bei Zusatzklammer: else wird ausgeführt)
2. Fall: nur 1. Parameter = Die 1. if-Abfrage ist positiv, wodurch die 2. ausgeführt wird. Da die 2. if-Abfrage negativ ist, wird korrekt an das else weitergegeben. (bei Zusatzklammer: else wird nicht ausgeführt, da es sich nur auf 1. if bezieht)
3. Fall: beide Parameter = Da die 1. if-Abfrage positiv ist, wird auch die 2. ausgeführt. Diese ist ebenfalls positiv, wodurch die Befehle in er Klammer ausgeführt werden.

Da sich das else wohl immer nur auf ein if bezieht, muss man diese doppelte if-Abfrage umgehen, was z.B. so wie bei miniversums Post (siehe weiter unten) aussehen könnte:
01.
@echo off & setlocal
02.
if "%~1"=="end" if not "%~2"=="" (
03.
    set "option=%~2"
04.
    echo  w„hle:%~2 ^(nach angegebenem Parameter^)
05.
    goto:EingabeOK
06.
) 
07.
set /p option= w„hle:
08.
:EingabeOK
09.
echo Option: %option%
10.
pause
@ Bastla: würdest du bitte die 3 Fälle überprüfen (ob bei mir auch alles wieder normal funktionier)... oder evtl. fällt dir ja noch eine andere Möglichkeit ein.

MfG,
halo7one
Bitte warten ..
Mitglied: bastla
19.05.2008 um 17:23 Uhr
Hallo halo7one!

So ganz sicher bin ich nicht, was Du im Detail bezweckst - eigentlich verstehe ich es so: Wenn %2 nicht vorhanden ist (egal, ob es %1 gibt oder nicht, und ob %1 "end" enthält), muss eine Eingabe erfolgen - dann genügt aber im Prinzip
01.
if "%~2" neq "" (
02.
  set "option=%~2"
03.
  echo  w„hle:%~2 ^(nach angegebenem Parameter^)
04.
) else set /p option= w„hle:
In Deinem letzten Batch unterstellst Du aber, dass für den Fall, dass als %1 "end" übergeben wurde, %2 auch vorhanden wäre (%para% ist ja schon vor der Abfrage nach %2 "true" und kann nicht mehr "false" werden).

Was soll eigentlich geschehen, wenn %1 einen anderen Wert als "end" enthält, bzw, etwas allgemeiner formuliert: Wie geht es nach diesem Block weiter?

Grüße
bastla
Bitte warten ..
Mitglied: halo7one
19.05.2008 um 20:10 Uhr
Hi Bastla,
ganz einfach: wenn einer der beiden Parameter nicht richtig gesetzt ist, soll die Eingabe erfolgen.

Mit der Variante mit %para% hast du recht, ich habe das else vergessen (musste ich mir ja neu zusammenbasteln... da hab ich was vergessen) =>wurde korrigiert

Fällt dir dafür noch eine andere Möglichkeit ein? Oder anders gesagt: ist es möglich 2 if's einem else zuzuordnen?

Gruß,
halo7one
Bitte warten ..
Mitglied: miniversum
19.05.2008 um 20:53 Uhr
Fällt dir dafür noch eine andere Möglichkeit ein? Oder anders gesagt: ist es möglich 2 if's einem else zuzuordnen?

Versuchs mal so:
01.
@echo off & setlocal
02.
if "%~1"=="end" if not "%~2"=="" (
03.
    set "option=%~2"
04.
    echo  w„hle:%~2 ^(nach angegebenem Parameter^)
05.
    goto:EingabeOK
06.
) 
07.
set /p option= w„hle:
08.
:EingabeOK
09.
echo Option: %option%
10.
pause
Damit hast du ja "indirekt" ein else was du auf beleibeg viele, auch anders kombinierte If-Konstruktionen anwenden kannst.
Bitte warten ..
Mitglied: bastla
19.05.2008 um 22:16 Uhr
Hallo halo7one!

... wurde korrigiert
Nicht wirklich - jetzt ist es so, wie von mir beschrieben: Es kommt nur noch auf %2 an, und dann könntest Du %para% auch einsparen und unmittelbar die beiden Zweige verwenden.

Da Du ja aber eigentlich eine UND-Verknüpfung zu suchen scheinst, sollte miniversums Version letztlich passen.

Grüße
bastla
Bitte warten ..
Mitglied: halo7one
19.05.2008 um 23:39 Uhr
ok ok ich bin 2. auf die gleiche Falle reingefallen -_-

Nun werde ich miniversums Version nehmen, womit alles geklärt wäre!

Falls noch jemand eine andere Lösung hat (sowas wie ein UND: if ... AND if... else ...), würde ich mich sehr darüber freuen...

Also abschließend ein DICKES DANKE an Bastla und miniversum!

Bis zum nächsten Problem ;) & MfG,
halo7one
Bitte warten ..
Ähnliche Inhalte
Java

If abfrage Schlägt immer fehl (JAVA)

gelöst Frage von DomiZone1Java2 Kommentare

Hallo ich habe Folgendes Problem diese if abfrage Schlägt immer fehl obwohl ich Window 7 Habe kann mir jemand ...

Batch & Shell

Cmd If ()else(if) geht nicht

gelöst Frage von SaschaaaaaBatch & Shell2 Kommentare

Hallo Leute, ich habe mir ein kleines Script erstellt welches den PC herunterfährt wenn er 90 Minuten im Leerlauf ...

VB for Applications

If exist - if not exist in .vbs - Datei

gelöst Frage von Komoran12VB for Applications24 Kommentare

Moin, moin, vielleicht hat jemand ja einen Tipp für mich. Mit nachfolgender .vbs lasse ich mir einen Messagebox ausgeben: ...

VB for Applications

If Then Next

gelöst Frage von AximandVB for Applications12 Kommentare

Hallo, gibt es eigentlich eine Möglichkeit den nächsten Durchlauf einer Schleife vorzeitig zu initiieren? Hier also, wenn Zelle i,3 ...

Neue Wissensbeiträge
Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 1 TagInternet5 Kommentare

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Windows 10

Netzwerk-Bug in allen Windows 10-Versionen durch Januar 2019-Updates

Information von kgborn vor 1 TagWindows 101 Kommentar

Nur ein kurzer Hinweis für Admins, die Windows 10-Clients im Portfolio haben. Mit den Updates vom 8. Januar 2019 ...

Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 2 TagenWindows 102 Kommentare

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 2 TagenSicherheit6 Kommentare

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Heiß diskutierte Inhalte
TK-Netze & Geräte
TAPI auf einem Win2016Server installieren und einrichten
Frage von wstabelTK-Netze & Geräte30 Kommentare

Hallo liebe Admins, ich habe folgende Situation: 1 Windows Server 2016 Standard als DC 1 SNOM 710 IP-Telefon 1 ...

Batch & Shell
Mit findstr batch doppelte zeilen einer txt löschen
Frage von Burningx2Batch & Shell25 Kommentare

Hi Vor einer weile habe ich im netzt einen windows shell befehl gefunden mit welchem man über die konsole ...

Verschlüsselung & Zertifikate
Netzwerkfreigabe Verschlüsselung
Frage von grill-itVerschlüsselung & Zertifikate20 Kommentare

Moin zusammen, sicher nutzen hier die ein oder anderen ein Produkt zur Verschlüsselung von Netzwerkfreigaben/-laufwerken auf denen hochsensible Daten ...

Microsoft
Übertragung von MS Volumenlizenzen
Frage von SherlockineMicrosoft20 Kommentare

Ich bin Angestellte in einer kleinen 10-köpfigen IT-Firma, die Netzwerklösungen, Telefonielösungen und Ähnliches anbietet. Im Sommer hatten wir einen ...