Frage

Ein Teil der Installation für eine App ich verantwortlich bin, kompiliert einige C-Code-Bibliotheken. Dies wird in einer Konsole mit GNU Make.

So, als Teil der Installation, ein Konsolenfenster aufspringt, sehen Sie die Dateiausgabe wiz make durch, wie es kompiliert und Links, wenn das Konsolenfenster beendet wird geschlossen, und das Installationsprogramm wird fortgesetzt.

Alles war gut, es sei denn es einen Übersetzungsfehler ist. Dann wird die Make-Datei Fehler aus und das Konsolenfenster schließen, bevor Sie eine Chance haben, um herauszufinden, was passiert ist.

Also, was ich möchte geschehen ist das Konsolenfenster Pause haben mit ‚eine Taste drücken, um fortzufahren‘ Typ-Funktionalität, wenn es einen Fehler von der Make-Datei ist so, dass die Konsole geöffnet bleibt. Ansonsten genauso normal verlassen und die Konsole schließen.

Ich kann nicht arbeiten, wie dies in einer GNU Makefile zu tun, oder aus einer Batch-Datei, die das Make laufen konnte.

War es hilfreich?

Lösung

Dies sollte den Trick tun:

if not ERRORLEVEL 0 pause

Typ help if in DOS für weitere Informationen auf Errorlevel Nutzung.

Andere Tipps

Dies ist, was Sie suchen:

if ERRORLEVEL 1 pause

Wenn Sie geben

HELP IF

Sie erhalten diese Info: Error-Nummer | Gibt einen wahren Zustand, wenn der letzte Programmlauf einen Exit-Code zurückgegeben gleich oder größer als die Nummer angegeben ist.

Mit diesem einfachen C-Programm, um den Exit-Code zu manipulieren:

#include <stdio.h>
main(int argc, char *argv[]) {
    if (argc == 2) {
        // return integer of argument 1
        return strtol(argv[1], NULL, 10);
    }
    else {
        return 0;
    }
}

Wir testen den Exit-Code in einer Batch-Datei wie folgt:

test.exe 0
IF ERRORLEVEL 0 PAUSE

Bedingung : 0 => 0 == TRUE

Wenn ERRORLEVEL = 0, wird die Pause auftreten, da die Logik >= oder Größer-als-oder-gleich . Dies ist wichtig, da es nicht sofort klar ist, dass die Bedingung nicht ein == Vergleich ist.

Beachten Sie, dass für 1 => 0 subsituting auch wahr sein, und damit auch die Pause auftreten. Dies gilt für jede positive Zahl ist.

Wir können den gegenteiligen Effekt auslösen nur von unten 0 gehen:

test.exe -1
IF ERRORLEVEL 0 PAUSE

Bedingung : -1 => 0 == FALSE

Da ein ERRORLEVEL von 1 typischerweise bedeutet, dass es ein Fehler ist, und 0 keinen Fehler, wir können nur die minimale Erhöhung der Vergleichsbedingung zu bekommen, was wir wollen, wie so:

test.exe 0
IF ERRORLEVEL 1 PAUSE

Bedingung : -1 => 1 == FALSE

Bedingung : 0 => 1 == FALSE

Bedingung : 1 => 1 == TRUE

In diesem Beispiel. das Skript wird anhalten, wenn ERRORLEVEL 1 oder höher

ist

Beachten Sie, dass diese -1 Exit-Codes die gleiche wie 0 ermöglicht. Was passiert, wenn man nur pausieren will 0 nicht? Wir können eine separate Syntax verwenden:

test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE

Bedingung : -1 != 0 == TRUE

Bedingung : 0 != 0 == FALSE

Bedingung : 1 != 0 == TRUE

In diesem Beispiel pausiert das Skript, wenn %ERRORLEVEL% nicht 0 ist Wir können dies tun, indem Sie den EQU-Operator zunächst zu prüfen, ob %ERRORLEVEL% EQU 0, dann wird der NOT-Operator die entgegengesetzte Wirkung, das entspricht den != Betreiber zu bekommen. Aber ich glaube, das funktioniert nur auf NT-Maschinen, nicht pures DOS.

Referenzen:

http: / /chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html

Haben Sie versucht, die 'Pause' Befehl?

@echo off
echo hello world
pause
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top