Batch Errorlevel abfragen

Von: , Frage gestellt am Mi, 28. Sep 2005

Hallo,
über ein Script weise ich mir Netzlaufwerke zu,
nun möchte ich in einer Log-Datei eintragen ob die Zuweisung
geklappt hat oder nicht.

Code:
echo Zuweisung des Verzeichnisses >> d:\xyz.log
net use v: \\server\daten

Nun soll in der Log aber nicht "Befehl erfolgreich ausgeführt" stehen, sondern ein eigener Text.

Folgende Abfrage trägt aber sowohl das Ergebis von Errorlevel 1 und 0 in die Log-Datei:
if errorlevel 1 echo [FEHLER] - Verzeichnis konnte nicht zugewiesen werden >> d:\xyz.log
if errorlevel 0 echo [OK] - Verzeichnis zugewiesen >> d:\xyz.log

Wie mach ich's richtig?

Danke und Gruß

Marcel

8 Antworten zu dieser Frage

  1. Antwort von nach 33 Minuten 0 hilfreich
    Re: Batch Errorlevel abfragen

    Hallo, Folgende Abfrage trägt aber sowohl das Ergebis von Errorlevel
    1 und 0 in die Log-Datei:
    if errorlevel 1 echo [FEHLER] - Verzeichnis konnte nicht
    zugewiesen werden >> d:\xyz.log
    if errorlevel 0 echo [OK] - Verzeichnis zugewiesen >>
    d:\xyz.log
    das ist richtig, da gemäß Dokumentation (z.B. `help if`):
    "Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich der Nummer zurückgibt."

    In diesem einfachen Fall würde z.B. eine ELSE-Klausel genügen:

    if ERRORLEVEL 1 (echo Fehler) else (echo OK)


    --
    PHvL

    • Antwort von nach 2 Stunden 0 hilfreich
      Re^2: Batch Errorlevel abfragen

      Hallo, das ist richtig, da gemäß Dokumentation (z.B. `help if`):
      "Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
      einen Code größer oder gleich der Nummer zurückgibt."
      OK, Prinzip habe ich wohl verstanden, aber:
      if a==v (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)
      liefert mir eine 7, logisch,
      mache ich nun einen net use befehl bekomme ich aber immer eine 0 als Ergebnis, egal ob ide Zuweisung funktioniert oder nicht

      if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)

      Wieso?

      Danke und Gruß

      Marcel

      • Antwort von nach 3 Stunden 0 hilfreich
        Re^3: Batch Errorlevel abfragen

        Hallo Marcel, mache ich nun einen net use befehl bekomme ich aber immer eine
        0 als Ergebnis, egal ob ide Zuweisung funktioniert oder nicht

        if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7
        >> d:\xyz.log)

        Wieso?
        Im Prinzip ist "errorlevel" ein Wert welcher ein Programm nach beendigung an das Betriebssystem zurückgibt.
        Der Programmierer muss also beim beenden seines Programms diesen Wert berechnen.
        Kann schon sein, dass "net" immer 0 zurückgibt weil da ein fehler drin steckt.

        MfG Peter(TOO)

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: Batch Errorlevel abfragen

          Moin Peter, Kann schon sein, dass "net" immer 0 zurückgibt weil da ein
          fehler drin steckt.
          Nö, "net" ist schon richtig programmiert, aber ich habe falsch programmiert *g*
          Besten Dank für die Unterstützung,
          schönes Wochenende

          Gruß

          Marcel

      • Antwort von nach 6 Stunden 0 hilfreich
        Re^3: Doch nicht verstanden

        Mahlzeit,

        du hast das noch nicht verstanden. Lies mal wieder: "Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
        einen Code größer oder gleich der Nummer zurückgibt."
        if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)
        Weil jeder Fehler auch die Bedingung "if errorlevel 0" erfüllt - es ist größer oder gleich 0.

        Teste folgende test.cmd:

        @echo off
        net use z: %1 
        if errorlevel 1 goto fehler
        echo kein Fehler
        goto :eof
        :fehler
        echo FEHLER!!!
        Folgende Ausgabe wird bei mir erzeugt:
        C:\Temp>test1.cmd \\127.0.0.1\f$
        Systemfehler 67 aufgetreten.
        Der Netzwerkname wurde nicht gefunden.
        FEHLER!!!
        C:\Temp>test1.cmd \\127.0.0.1\c$
        Der Befehl wurde erfolgreich ausgeführt.
        kein Fehler
        D:\Temp>
        Gruß

        Sancho

        • Antwort von nach einem Tag 1 hilfreich
          Funktioniert!!!

          Moin Sancho,
          jaja, lesenden Menschen...

          hab deine CMD getestet und dann für meine umgesetzt, siehe da es funktioniert, hatte mich irgendwie irgendwo verhaun.

          Vielen Dank, damit komm ich endlich ein Stück weiter.

          Schönes WE

          Gruß

          Marcel

      • Antwort von nach 6 Stunden 1 hilfreich
        Re^3: Batch Errorlevel abfragen

        Hallo, das ist richtig, da gemäß Dokumentation (z.B. `help if`):
        "Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
        einen Code größer oder gleich der Nummer zurückgibt."
        OK, Prinzip habe ich wohl verstanden, aber:
        if a==v (echo 0 >> d:\xyz.log) else (echo 7 >>
        d:\xyz.log)
        liefert mir eine 7, logisch,
        das ist ein völlig anderer IF-Befehl, um dieses Verhalten auch bei ERRORLEVEL zu haben, müsstest du den Fehlercode aus einer Umgebungsvariablen lesen. Falls keine Umgebungsvariable mit dem Namen ERRORLEVEL definiert ist, geht das mit %ERRORLEVEL%:

        if %ERRORLEVEL%==0 (echo 0) else (echo 7)
        mache ich nun einen net use befehl bekomme ich aber immer eine
        0 als Ergebnis, egal ob ide Zuweisung funktioniert oder nicht
        if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7
        >> d:\xyz.log)
        Sicher, weil das dem IF-Befehl
        if %ERRORLEVEL% GEQ 0 (echo 0) else (echo 7)

        entspricht. Deshalb hatte ich ja ERRORLEVEL gegen 1 geprüft.

        --
        PHvL

        • Antwort von nach einem Tag 1 hilfreich
          Re^4: Batch Errorlevel abfragen

          Hallo,
          wie auch immer,
          mit dem Script von Sancho hab ich's hinbekommen, und denke dank euch jetzt auch einigermaßen verstanden.

          Vielen Dank für deine Mühe und Hilfe.

          Ein schönes Wochenende

          wünscht

          Marcel

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!