Batch-Datei goto geht nicht

R

Ringelsocke

Vorabinfo: Betriebssystem Vista, die Batch habe ich einfach erstellt indem ich eine Textdatei erstellt habe und in .bat umbenannt habe und ich starte sie einfach per Doppelklick (bzw. später soll sie von einem C# Programm aufgerufen werden)
Hallo, ich habe eine Batchdatei die eine Xsl-Transformation durchführt. Das geht auch ganz gut und ich kann mir mit %ERRORLEVEL% anzeigen lassen ob die Transformation erfolgreich war oder es Fehler gab. Nun möchte ich aber nicht nur die "0" (bei Erfolg) oder "1" (bei Fehler) ausgeben sondern auch noch einen benutzerfreundlichen Fehlertext.
Dachte das wäre einfach über goto zu lösen, aber es funktioniert leider bei mir nicht, die Batchdatei geht in der ersten Zeile in der ich goto verwende zu, d.h. ich sehe auch die Fehlermeldung nicht (zum pause kommt er garnicht weiter, das Konsolenfenster geht einfach zu, zu schnell um noch was lesen zu können).
Hier die entsprechenden Zeilen:
--------------------------------------------------
IF %ERRORLEVEL% 0 goto FINISH_SUCCESS
goto FINISH_ERROR

@ECHO.
@ECHO.

:FINISH_SUCCESS
COLOR 2
@ECHO *****************************************
@ECHO Export finished.
@ECHO Exittime: %date% %time%
@ECHO *****************************************
@ECHO.
goto END_THIS

:FINISH_ERROR
COLOR 4
@ECHO *****************************************
@ECHO Export finished. Errors occured!
@ECHO Exittime: %date% %time%
@ECHO *****************************************
@ECHO.
goto END_THIS

:END_THIS
@ECHO.

pause
--------------------------------------

Hat jemand eine Idee was ich falsch mache? Beim googeln findet man sehr viele verschiedene Batch-Syntax, wenn ich das @ vor dem ECHO weglasse dann printet er mir scheinbar alles aber macht nichts. Manchmal wird bei der Sprungmarke goto :Sprungmarke geschrieben, machmal so wie ich's oben hab ohne das :. Hab aber beides erfolglos probiert.
Wäre für jeden Tipp dankbar!

gruß & thx
Ringelsocke
 
Hi.

Es muss entweder
Code:
IF ERRORLEVEL 0 goto FINISH_SUCCESS
oder (wenn die Befehlszeilenerweiterungen aktiviert sind):
Code:
IF %ERRORLEVEL% EQU 0 goto FINISH_SUCCESS
heißen.

Allerdings würde die erste Bedinung immer zutreffen, da die Bedingung wahr ist, falls der letzte Befehl bzw. das letzte ausgeführte Programm einen Code größer oder gleich dem angegebenen Wert hatte. Siehe help if

Gruß
 
Die zweite Variante geht! Danke!
Die erste Variante würde auch funktionieren, du mußt nur die größeren Fehlercodes immer zuerst prüfen:
Code:
IF ERRORLEVEL 1 GOTO FINISH_ERROR
IF ERRORLEVEL 0 GOTO FINISH_SUCCESS
Gruß

PS: statt vor jede Zeile ein @ Zeichen zu schreiben, kannst du auch am Anfang die Ausgabe der ausgeführten Befehle ausschalten:
Code:
@echo off
 
Zuletzt bearbeitet:
danke für den Tipp, aber da mein Programm bei anderen Usern läuft will ich die ausgeführten Aktionen sehen, da ich im Fehlerfall einfach einen Screenshot anfordern kann (die Ausgabe der (dynamisch per Programm erzeugten) Batch-Datei ist in meinem Programm umgeleitet auf eine Programm-"Konsole")
gruß
Ringelsocke
 
Zurück