Der befehl else ist entweder falsch geschrieben oder konnte nicht gefunden werden!?
Kann mir jemand sagen warum ich die Fehlermeldung:"Der befehl else ist entweder falsch geschrieben oder konnte nicht gefunden werden" erhalte.
Ich finde das Problem leider nicht.
Vielen Dank im Voraus!
effeksys
Ich finde das Problem leider nicht.
if "%computername:~5,1%" GEQ "0"if "%computername:~5,1%" LEQ "9" (
echo Zahl erkannt >> c:\zahl.log
set var=%computername:~2,4%
goto nextStep )
else (
echo keine Zahl erkannt >> c:\zahl.log
set var=%COMPUTERNAME:~2,3%
goto nextStep )
Vielen Dank im Voraus!
effeksys
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167168
Url: https://administrator.de/contentid/167168
Ausgedruckt am: 20.11.2024 um 00:11 Uhr
10 Kommentare
Neuester Kommentar
Aloha,
... tippe doch einmal
und vergleiche mal mit deiner Struktur
greetz André
P.S.: Zahlen als Text formatiert zu vergleichen scheint inzwischen modern zu sein ...
... tippe doch einmal
IF /?
in die Command ein und beachte den Part:IF EXIST test.txt (
del test.txt
) ELSE (
echo test.txt fehlt
)
und vergleiche mal mit deiner Struktur
greetz André
P.S.: Zahlen als Text formatiert zu vergleichen scheint inzwischen modern zu sein ...
LEQ "9"
... *grusel* das mag zwar funktionieren aber in einigen Situationen (wie in einem Thread vor kurzer Zeit) fällt man damit auf die Nase
Moin effeksys,
nein, funktioniert nicht.
Wenn die erste IF-Bedingung nicht erfüllt ist, dann geht die Logik weder über ein "SET var=whatever" noch zu einem der Goto's.
Lass Zeile 1 doch mal mit ' IF "X" GEQ "U" ...' anfangen und den Rest unverändert.
@Skyemugen
In diesem Fall war der "Ziffern-in-Anführungszeichen"-Vergleich beabsichtigt
Denn wenn der PC-Name kürzer als 6 Zeichen ist ("PC123"), dann würde OHNE Anführungszeichen herauskommen:
Grüße
Biber
nein, funktioniert nicht.
Wenn die erste IF-Bedingung nicht erfüllt ist, dann geht die Logik weder über ein "SET var=whatever" noch zu einem der Goto's.
Lass Zeile 1 doch mal mit ' IF "X" GEQ "U" ...' anfangen und den Rest unverändert.
@Skyemugen
In diesem Fall war der "Ziffern-in-Anführungszeichen"-Vergleich beabsichtigt
if "%computername:~5,1%" GEQ "0" if "%computername:~5,1%" LEQ "9"
Denn wenn der PC-Name kürzer als 6 Zeichen ist ("PC123"), dann würde OHNE Anführungszeichen herauskommen:
if %computername:~5,1% GEQ 0 if %computername:~5,1% LEQ 9 echo 42
:: ----> if GEQ 0 if LEQ 9 echo 42 -------->TILT
Grüße
Biber
Moin effeksys,
ja, sorry, das "X für ein U"-Beispiel war genau verkehrt herum gewählt.
ich wollte natürlich eine offensichtlich unmöglich eintretende Bedingung als erste IF-Bedingung darstellen, also "wenn "X" gleich "U" wäre...
Bzw. im danebengegangenen Beispiel oben : IF "X" EQU "U" ....
Also jetzt zu deiner Frage, ob es so funktionieren würde....
Ja nee.... schon ..kann sein....vielleicht auch nicht.... wer weiss da schon bei 15 Zeilen und sechs bis acht Klammern.
Schau noch mal Abschied nehmend drauf auf dieses unwartbare Gestrunkele und dann mach einen leeren Editor auf.
Nur die Strategieüberlegung ist doch wichtig - den Positivfall "Es ist eine Ziffer" und nur diesen kannst du sauber SOFORT erkennen.
Dann sag doch
Geht doch ganz ohne eine einzige Klammer UND lässt sich warten.
Grüße
Biber
[Edit] Tippfehler in Zeile 02 set dctemp="dc%computername:~2,4%" berichtigt - siehe unten. [/Edit]
ja, sorry, das "X für ein U"-Beispiel war genau verkehrt herum gewählt.
ich wollte natürlich eine offensichtlich unmöglich eintretende Bedingung als erste IF-Bedingung darstellen, also "wenn "X" gleich "U" wäre...
Bzw. im danebengegangenen Beispiel oben : IF "X" EQU "U" ....
Also jetzt zu deiner Frage, ob es so funktionieren würde....
Ja nee.... schon ..kann sein....vielleicht auch nicht.... wer weiss da schon bei 15 Zeilen und sechs bis acht Klammern.
Schau noch mal Abschied nehmend drauf auf dieses unwartbare Gestrunkele und dann mach einen leeren Editor auf.
Nur die Strategieüberlegung ist doch wichtig - den Positivfall "Es ist eine Ziffer" und nur diesen kannst du sauber SOFORT erkennen.
Dann sag doch
:: wenn ..[6. Zeichen ganz klar eine Ziffer]
....IF....GEQ "0".......IF ....LEQ .."9" set "dctemp=dc%computername:~2,4%" && goto allesBleibtGut
::: und hier hast du nur noch die Keine-Ziffer-Fälle, die nach deiner Logik allesamt bedeuten 3stellige Schulnummer.
:: ...kannst du also alle gleichermaßen SETzen
set "dctemp=dc%computername:~2,3%"
:: hier kommt gar keine weitere Codezeile...denn hier ist der Codeverlauf für alle gleich.
:allesBleibtGut
Geht doch ganz ohne eine einzige Klammer UND lässt sich warten.
Grüße
Biber
[Edit] Tippfehler in Zeile 02 set dctemp="dc%computername:~2,4%" berichtigt - siehe unten. [/Edit]
Moin effeksys,
ich drück es mal positiv aus: an 40% deiner Skriptzeilen finde ich gar nichts rumzumäkeln...
Aber zu den restlichen drei Zeilen hätte ich Anmerkungen -- nämlich zu Zeile 01, 02 und 05..
Geändert habe ich:
01 -- Hier habe ich das "setlocal" ergänzt. Denn du setzt Variablen mit SET und die brauchst nur du bzw. dein Schnipsel. "SetLocal" sichert die Privatsphäre deiner Variablen. Einfach früh angewöhnen.
02 -- Hier war ein echter Fehler -- Das Anführungszeichen war an der falschen Stelle ([Edit] aus meiner Skizze übernommen. Mein Tippfehler [/Edit]) . Bitte vergleiche mit deiner Version oben.
05 -- Wenn du schon mit ">>" das Logfile immer fortführst, dann nützen dir die 127 Einträge in einem halben Jahr auch nur etwas, wenn du wenigstens das Datum jeder Zeile kennst.
P.S. Eine ganz ganz ganz schlechte Idee (aber nicht geändert von mir) ist es, eine Log-Datei nun ausgerechnet auf C:\ und ausgerechnet auf C:-Rootordner zu schreiben.
Auf 97% aller PCs hat dein Schnipsel da überhaupt keine Schreibrechte und brezelt weg. Und bei den restlichen 3% der der PCs werden die User bei dir fragen, warum du ihnen den Rootordner zumüllst.
Grüße
Biber
ich drück es mal positiv aus: an 40% deiner Skriptzeilen finde ich gar nichts rumzumäkeln...
Aber zu den restlichen drei Zeilen hätte ich Anmerkungen -- nämlich zu Zeile 01, 02 und 05..
@echo off & setlocal
if "%computername:~5,1%" GEQ "0" if "%computername:~5,1%" LEQ "9" set "var=%computername:~2,4%" && goto nextStep
set "var=%computername:~2,3%"
:nextStep
echo Variable am %date% ist: [%var%] >> c:\var.log
Geändert habe ich:
01 -- Hier habe ich das "setlocal" ergänzt. Denn du setzt Variablen mit SET und die brauchst nur du bzw. dein Schnipsel. "SetLocal" sichert die Privatsphäre deiner Variablen. Einfach früh angewöhnen.
02 -- Hier war ein echter Fehler -- Das Anführungszeichen war an der falschen Stelle ([Edit] aus meiner Skizze übernommen. Mein Tippfehler [/Edit]) . Bitte vergleiche mit deiner Version oben.
05 -- Wenn du schon mit ">>" das Logfile immer fortführst, dann nützen dir die 127 Einträge in einem halben Jahr auch nur etwas, wenn du wenigstens das Datum jeder Zeile kennst.
P.S. Eine ganz ganz ganz schlechte Idee (aber nicht geändert von mir) ist es, eine Log-Datei nun ausgerechnet auf C:\ und ausgerechnet auf C:-Rootordner zu schreiben.
Auf 97% aller PCs hat dein Schnipsel da überhaupt keine Schreibrechte und brezelt weg. Und bei den restlichen 3% der der PCs werden die User bei dir fragen, warum du ihnen den Rootordner zumüllst.
Grüße
Biber