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, 4671 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
Batch & Shell
Fehler in IF Abfrage
gelöst Frage von anmelderBatch & Shell4 Kommentare

Hallo, folgender Code macht Probleme: Die Zahl muß immer zweistellig eingegeben werden damit die Eingabe einheitlich ist, die 0 ...

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

Powershell IF Abfrage Vergleichsoperatoren

gelöst Frage von PeterzBatch & Shell4 Kommentare

Hallo, ich möchte in einer IF Abfrage Vergleichsoperatoren verknüpfen und bekomme es nicht hin. Es sollte so aussehen: IF ...

Batch & Shell

Batch Programmierung IF Abfragen

gelöst Frage von PathoeBatch & Shell8 Kommentare

Hallo zusammen, ich möchte gerne einige IF-Abfragen in einer Batch programmieren, was allerdings nicht so möchte wie ich. Er ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 2 TagenAusbildung35 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 4 TagenSpeicherkarten5 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 4 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 5 TagenHardware4 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
Frage von Looser27Windows Userverwaltung27 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1014 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...

Switche und Hubs
POE-Switche
gelöst Frage von MiStSwitche und Hubs13 Kommentare

Guten Morgen, ich überlege ob ich in unserem Netzwerk die aktuellen Switche (D-LINK DGS-1210-28) durch PoE-Switche ersetzen soll. Der ...