# Batch-Datei goto geht nicht



## Ringelsocke (17. August 2009)

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


----------



## deepthroat (17. August 2009)

Hi.

Es muss entweder

```
IF ERRORLEVEL 0 goto FINISH_SUCCESS
```
oder (wenn die Befehlszeilenerweiterungen aktiviert sind):

```
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ß


----------



## Ringelsocke (17. August 2009)

Die zweite Variante geht! Danke!
gruß
Ringelsocke


----------



## deepthroat (17. August 2009)

Ringelsocke hat gesagt.:


> Die zweite Variante geht! Danke!


Die erste Variante würde auch funktionieren, du mußt nur die größeren Fehlercodes immer zuerst prüfen:

```
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:

```
@echo off
```


----------



## Ringelsocke (17. August 2009)

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


----------

