effeksys
Goto Top

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.
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

Content-Key: 167168

Url: https://administrator.de/contentid/167168

Printed on: April 24, 2024 at 19:04 o'clock

Member: Skyemugen
Skyemugen May 30, 2011 at 10:03:54 (UTC)
Goto Top
Aloha,

... 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
Member: effeksys
effeksys May 30, 2011 at 10:25:06 (UTC)
Goto Top
Hi André.

Sofern ich das richtig verstehe müsste es doch so korrekt sein. Jedoch bekomme ich noch immer die Fehlermeldung.
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 
)
Member: effeksys
effeksys May 30, 2011 at 10:37:14 (UTC)
Goto Top
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 
)
Funktioniert. Ich hatte eine weitere else-Bedingung übersehen...
Member: Biber
Biber May 30, 2011 at 10:59:58 (UTC)
Goto Top
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
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
Member: effeksys
effeksys May 30, 2011 at 12:03:07 (UTC)
Goto Top
@Biber
Vielen Dank für den Hinweis! An den else-Zweig der ersten if hatte nicht mehr gedacht (wegen der Einzeiler-Schreibweise)...

Mit IF "X" GEQ "U" fallen dann doch auch alle Treffer zwischen " " und "T" (Reihenfolge der ASCII-Codierung) raus, oder?
Hintergrund: Das Namensschema für die windows-clients ist "wsXXX...." oder wsXXXX...". Nach der 3. oder 4.Zahl kann irgendein Zeichen kommen.

Gibt wahrscheinlich einen besseren Weg, aber jetzt müsste es doch zumindest funktionieren. Oder?
if "%computername:~5,1%" GEQ "0" (  
	if "%computername:~5,1%" LEQ "9" (   
		echo 4.Zahl erkannt! >> c:\log.log
		set var=%computername:~2,4%
		goto nextStep 
	) else ( 
		echo keine 4. zahl erkannt. >> c:\log.log
		set var=%COMPUTERNAME:~2,3%
		goto nextStep 
	)
)else (
	echo keine 4.Zahl erkannt. >> c:\log.log
	set var=%COMPUTERNAME:~2,3%
	goto nextStep 
	)
Member: Biber
Biber May 30, 2011 at 19:00:04 (UTC)
Goto Top
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
 
:: 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]
Member: bastla
bastla May 30, 2011 at 19:09:00 (UTC)
Goto Top
... und beweist, dass ein "goto" nicht immer zu verachten ist ... face-wink

Grüße
bastla
Member: effeksys
effeksys May 31, 2011 at 16:00:36 (UTC)
Goto Top
Nochmals herzlichen Dank!

Jetzt ist das Skript kurz und prägnant.
@echo off
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 ist:%var% >> c:\var.log
Member: Biber
Biber May 31, 2011 at 19:00:55 (UTC)
Goto Top
Moin effeksys,

ich drück es mal positiv aus: an 40% deiner Skriptzeilen finde ich gar nichts rumzumäkeln... face-wink

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
Member: effeksys
effeksys Jun 01, 2011 at 12:09:48 (UTC)
Goto Top
Hi Biber.

Wenn ich weiterhin von dir solch wertvolle Tipps bekommen umso näher komm ich als Batch-Neuling an die 100%. face-wink

zu 01 - gut zu wissen
zu 02 - den Fehler hatte ich in meinen Skript schon ausgemerzt, nachdem ich mich mich gewundert hatte das die Anführungszeichen mit in der Variable enthalten waren. face-wink
zu 05 - beim ausführen meines Skript lege ich zu Anfang die Logdatei immer neu an. Jedoch ist der Eintrag %date% trotzdem sinnvoll.

Bisher haben die normalen Benutzer keinen Zugriff auf C: und an den Rechten scheitert es auch nicht da ich es für ein Bootskript brauche. Aber trotzdem auch hier vielen Dank für deine Tipps!

Grüße,
effeksys