Hai!
CED999 schrieb:
1.) Wenn ich (ohne Befehlserweiterungen) schreiben würde: "if errorlevel==0" dann würde das schon bedeuten, dass das Errorlevel genau = 0 sein MUSS. Ja/Nein?
Du musst folgendes unterscheiden: Variablen, die Du in deinen Batches verwendest, sind immer in %-Zeichen (es gibt auch noch das !-Zeichen, aber das ist dann ein Spezialfall) einzuschließen. Die Abfrage "IF ERRORLEVEL 1" ist eine if-Anweisung, die eine spezielle Bedingung verwendet, nämlich das
Schlüsselwort ERRORLEVEL (neben ERRORLEVEL gibt es z.B. noch EXIST zur Abfrage, ob eine Datei/Verzeichnis existiert) - das ist etwas anderes als die Variable ERRORLEVEL, die Du oben verwenden willst.
Antwort also: Nein, weil mit dem Schlüsselwort ERRORLEVEL automatisch eine Prüfung auf größer oder gleich mit dem folgenden numerischen Wert verbunden ist und deshalb das doppelte Gleichheitszeichen hier syntaktisch falsch ist. Wenn Du die Variable ERRORLEVEL abfragen willst, dann müsstest Du %ERRORLEVEL% schreiben und dann hättest Du recht, denn es würde genau auf 0 geprüft.
Kurzer Einschub: Es ist generell gar keine gute Idee, Variablen zu verwenden, die Schlüsselworten von DOS entsprechen. Das resultiert in Fehlern, die man nur sehr schwierig finden kann.
Soweit die Theorie: Kommen wir jetzt zur Praxis der DOS-Befehle, denn die ist manchmal sehr seltsam, um es mal vorsichtig auszudrücken
Offenbar setzt die Command Shell (zumindestens unter Win7, das ich hier nur zur Verfügung habe - so ändern sich bei den DOS-Befehlen gerne einmal kleinere Details, was man nur durch Ausprobieren herausfindet) die Anweisung
als
um - das kannst Du leicht in einer eigenen Batchdatei testen, wenn Du einfach ECHO ON ganz zu Anfang dieser Batchdatei schreibst und dann z.B. beide Befehle mit einem ECHO irgendwas dahinter eingibst.
CED999 schrieb:
2.) Könntet ihr mir jeweils einen kurzen Befehlt nennen, der immer untrue ist. Ich meine eine Aktion bei der Errolevel NICHT= 0 ist.
Das ist nicht ganz so einfach. Die beste Lösung, die mir einfällt (und die ab ... hmmm ... Windows NT? ... funktionieren sollte) ist eine, für die man eine zweite Batchdatei (z.B. mit dem Namen setel.bat) benötigt:
Code:
:: Batchdatei zum Setzen des ERRORLEVELS auf den Wert 1
EXIT /B 1
Diese Datei ruft man dann aus der Batchdatei auf, in der man den Errorlevel test will:
Code:
CALL setel.bat
IF ERRORLEVEL 1 ECHO Hat geklappt
CED999 schrieb:
3.) Eine Aktion, die immer WAHR ist. Bis jetzt nutze ich md c:\test1 und es erstaunt mich, dass es auch true ist wenn der Ordner schon besteht. Eigentlich müsste das KREIEREN des ordners doch untrue sein, weil schon vorhanden...
Wenn Du ein bereits existierendes Verzeichnis mit MD nochmals kreieren willst, dann wird der Errorlevel auf 1 gesetzt, wie man leicht mit
Code:
ECHO ON
MD test
ECHO %ERRORLEVEL%
MD test
ECHO %ERRORLEVEL%
testen kann.
Folgender Befehl sollte (im Normalfall) immer den Errorlevel 0 liefern:
(Ausnahme: Du hast keine Zugriffsberechtigung auf C: oder ein Laufwerk mit dem Buchstaben existiert nicht - beides ist im Normalfall nicht so).
Gruß,
Thorsten