Die Befehle DO (bei Verwendung mit dem Schlüsselwort UNTIL oder WHILE), IF, IFF/ELSEIFF und die Variablenfunktion @WENN a bewerten bedingter Ausdruck, und führen Sie eine andere Aktion aus, je nachdem, ob die Ausdruck ist wahr. Der SWITCH Der Befehl prüft Wertepaare auf Gleichheit. Die meisten von den Beispiele Verwenden Sie unten die IF Befehl, aber bedingte Ausdrücke könnten auch in den anderen oben genannten Fällen verwendet werden.

 

Ein bedingter Ausdruck kann einer der folgenden sein, wie unten beschrieben:

 

Ein Schrittrelationaler Ausdruck
Ein SchrittStatustest
Ein Schrittlogischer Ausdruck

 

Relationaler Ausdruck

 

Ein relationaler Ausdruck vergleicht zwei Zeichenfolgen unter Verwendung einer davon Vergleichsoperatoren in der Tabelle unten. Jede dieser beiden Zeichenfolgen kann Literaltext, Umgebungs- und interne Variablen sowie Variablenfunktionen, einschließlich benutzerdefinierter, in beliebiger Kombination enthalten. Beachten Sie, dass doppelte Anführungszeichen von Bedeutung sind.

 

Numerischer und String-Vergleich

 

Beim Vergleich der beiden Zeichenfolgen wird entweder ein numerischer oder ein Zeichenfolgenvergleich durchgeführt. Ein numerischer Vergleich behandelt die Zeichenfolgen als numerische Werte und testet sie arithmetisch. Bei einem Zeichenfolgenvergleich werden die Zeichenfolgen als Text behandelt. Der Parser verwendet die für die beschriebenen Regeln @NUMERIC Funktion, um zu bestimmen, ob die Zeichenfolgen numerisch sind oder nicht, und nur wenn beide numerisch sind, wird ein numerischer Vergleich durchgeführt. Wenn einer der Werte nicht numerisch ist, wird ein Zeichenfolgenvergleich verwendet. Um einen Zeichenfolgenvergleich zu erzwingen, wenn beide Werte numerisch sein können, setzen Sie die zu testenden Werte in doppelte Anführungszeichen, wie unten gezeigt. Da es sich bei dem Anführungszeichen nicht um ein numerisches Zeichen handelt, wird ein Zeichenfolgenvergleich durchgeführt. Der numerische Vergleich kann nicht erzwungen werden. Hexadezimalzahlen numerisch vergleichen, müssen Sie sie mit in Dezimalzahlen umwandeln @KONVERTIEREN. Dies ist nicht erforderlich, wenn beide die gleiche Länge haben – String-Vergleich und numerischer Vergleich liefern das gleiche Ergebnis.

 

Das folgende Beispiel veranschaulicht den Unterschied zwischen numerischen Vergleichen und Zeichenfolgenvergleichen, wie in der folgenden Tabelle dargestellt. Numerisch ist 2 kleiner, aber als String ist sie „größer“, weil ihre erste Ziffer größer ist als die erste Ziffer von 19. Also die erste davon Bedingungen wird wahr sein, und das zweite wird falsch sein:

 

Ausdruck

Wert

Vergleichstyp

2 lt 19

was immer dies auch sein sollte.

numerisch

„2“ bis „19“

falsch

Schnur

 

Relationale Ausdrucksformate

 

Das Format eines relationalen Ausdrucks ist eines davon

 

num1 relationaler Operator num2

string1 relationaler Operator string2

 

Hinweis: Die richtige Syntax erfordert ein Raum sowohl davor als auch danach Operator um es von seinen Operanden zu trennen. Häufig vorkommende Konstrukte wie %a==b Abhängig von den spezifischen Parametern kann es funktionieren oder auch nicht, aber sie funktionieren hört niemals empfohlen.

 

Vergleichsoperatoren

 

Operator

numerischer Vergleich: Ausdruck is was immer dies auch sein sollte. if

String-Vergleich: Ausdruck is wahr, wenn, wenn die Groß-/Kleinschreibung ignoriert wird:

EQ or ==

num1 ist gleich num2

string1 ist gleich string2

NE or !=

num1 ist nicht gleich num2

string1 ist nicht gleich string2

LT

num1 weniger als num2

string1 alphabetisch vorangestellt string2

LE

num1 kleiner oder gleich ist num2

string1 alphabetisch vorangestellt oder gleich ist string2

GE

num1 größer oder gleich ist num2

string1 alphabetisch folgt oder ist gleich string2

GT

num1 größer ist als num2

string1 alphabetisch gelingt string2

EQC

als Saiten getestet è

string1 ist identisch mit string2, inklusive Groß-/Kleinschreibung

=~

Test für reguläre Ausdrücke

string1 entspricht dem regulären Ausdruck in string2

!~

Test für reguläre Ausdrücke

string1 stimmt nicht mit dem regulären Ausdruck in überein string2

 

Groß-/Kleinschreibungsunterschiede werden bei Zeichenfolgenvergleichen ignoriert (außer bei EQC). Wenn zwei Zeichenfolgen mit demselben Text beginnen, eine Zeichenfolge jedoch kürzer ist, wird davon ausgegangen, dass die kürzere Zeichenfolge der längeren vorausgeht (kürzer als diese ist). Beispielsweise ist „a“ kleiner als „abc“ und „hello_there“ größer als „hello“.

 

Wenn Sie Textzeichenfolgen vergleichen, müssen Sie die Parameter möglicherweise in doppelte Anführungszeichen setzen, um Syntaxfehler zu vermeiden, die auftreten können, wenn einer der Parameterwerte leer ist (z.B, aufgrund einer Umgebungsvariablen, der noch nie ein Wert zugewiesen wurde). Diese Technik funktioniert bei numerischen Vergleichen nicht, da die Anführungszeichen einen Zeichenfolgenvergleich erzwingen. Daher müssen Sie bei numerischen Tests sicherstellen, dass allen Variablen Werte zugewiesen werden, bevor der Test durchgeführt wird.

 

Um die Kompatibilität mit zu wahren CMD, TCC erkennt die folgenden zusätzlichen Namen für Bedingungen:

 

CMD

TCC

EQL or EQU

EQ

NEQ

NE

LSS

LT

LEQ

LE

GTR

GT

GEQ

GE

 

Interne Variablen und variable Funktionen sind in Kombination mit Zeichenfolgen- und Zahlenvergleichen sehr leistungsstark. Sie ermöglichen Ihnen, den Zustand Ihres Systems, die Eigenschaften einer Datei, Datums- und Uhrzeitinformationen oder das Ergebnis einer Berechnung zu testen. Möglicherweise möchten Sie die Variablen und Variablenfunktionen überprüfen, wenn Sie ermitteln möchten, wie Sie einen Bedingungstest am besten einrichten.

 

Statustest

 

Diese Bedingungen testen Betriebssystem, Dateisystem oder TCC Status. Zusätzlich zu den unten aufgeführten Tests gibt es viele interne Variablen und Variablenfunktionen, mit denen Sie den Status vieler anderer Teile des Systems testen können.

 

In den folgenden Beschreibungen der verschiedenen Statustests sind die Statustests genau dann wahr, wenn die angegebene Bedingung wahr ist.

 

DEFINIERT Variable

Wenn in der Umgebung eine Variable vorhanden ist, ist der Ausdruck wahr. Dies entspricht dem Testen, ob die Variable nicht leer ist oder nicht.




Hinweis: GOSUB-Variablen, Array-Variablen und interne Variablen sind in der Umgebung nicht vorhanden und bestehen daher immer den DEFINED-Test nicht.



FEHLERLEVEL [relationaler Operator] nicht

Dieser Test ruft den Exit-Code des vorhergehenden externen Programms ab. Konventionell geben Programme den Exit-Code 0 zurück, wenn sie erfolgreich sind, und eine Zahl ungleich Null, um einen Fehler anzuzeigen. Der relationaler Operator kann einer der oben aufgeführten sein (z. B. EQ, GT). Wenn kein Operator angegeben ist, ist der Standardwert GE. Der Vergleich erfolgt numerisch.




Nicht alle Programme geben einen expliziten Exit-Code zurück. Für Programme, die dies nicht tun, ist das Verhalten von ERRORLEVEL undefiniert.



EXISTIEREN Dateinamen

Wenn der Dateiname mit einer vorhandenen Datei übereinstimmt, ist der Ausdruck wahr. Sie können Platzhalter im Dateinamen verwenden. In diesem Fall ist der Ausdruck wahr, wenn eine Datei vorhanden ist, die dem Platzhalternamen entspricht. Der Dateiname kann einen absoluten oder relativen Pfad enthalten.




WARNUNG: Unter Windows ist der Ausdruck wahr, wenn es entweder eine Datei oder ein Verzeichnis mit dem Namen Dateiname gibt. Verwenden Sie stattdessen ISFILE oder ISDIR.




Der spezielle Dateiname NUL wird häufig in CMD-Batchdateien verwendet, um die Existenz eines Verzeichnisses zu testen. Der Ausdruck exist xxx\NUL ist nur wahr, wenn xxx ein Verzeichnis ist.



ISALIEN Pseudonym

Wenn Aliasname als Alias ​​definiert ist, ist der Ausdruck wahr.



ISAPP App Name

Wenn Appname mit dem Namen einer aktuell ausgeführten Anwendung übereinstimmt, ist der Ausdruck wahr. Um einer bestimmten Anwendung zuzuordnen, müssen Sie den vollständigen Pfadnamen der Anwendung eingeben. Teilnamen und Platzhalter führen zu unzuverlässigen Ergebnissen. Es werden sowohl die Kurz- als auch die Langform des Dateinamens überprüft (siehe LFN-Dateisuche Einzelheiten zur Entsprechung zwischen kurzen und langen Dateinamen finden Sie hier.


Für diesen Test sind möglicherweise DEBUG-Berechtigungen erforderlich.



ISBATCH Dateinamen

Wenn der angegebene Dateiname eine Batchdatei ist, ist der Ausdruck wahr.



ISDIR Weg

DIREXIST Weg

 

Wenn das durch den Pfad angegebene Verzeichnis existiert, ist der Ausdruck wahr. Der Pfad kann entweder absolut oder relativ sein. DIREXIST kann als Synonym für ISDIR verwendet werden.



ISFILE Dateinamen

Wenn der Dateiname mit einer vorhandenen Datei übereinstimmt, ist der Ausdruck wahr. Sie können Platzhalter im Dateinamen verwenden. In diesem Fall ist der Ausdruck wahr, wenn eine Datei vorhanden ist, die dem Platzhalternamen entspricht. ISFILE gleicht nur Dateien ab, keine Verzeichnisse.



IFUNKTION Name

Wenn der benutzerdefinierte Funktionsname geladen wird, ist der Ausdruck wahr.



ISINTERN Befehl

Wenn command ein aktiver interner Befehl ist, ist der Ausdruck wahr. Befehle können mit aktiviert und deaktiviert werden SETDOS /Ich befehle.



ISLABEL Etikette

Wenn in der aktuellen Batchdatei ein Label vorhanden ist, ist der Ausdruck wahr. Beschriftungen können ein oder mehrere Wörter lang sein. Beachten Sie, dass dieser Test nichts mit Festplattenpartitionsbezeichnungen zu tun hat.



ISBIBLIOTHEK Name

Wenn der Name eine Bibliotheksfunktion ist, ist der Ausdruck wahr



ISPLUGIN Name

Wenn der Name ein ist Plugin Variable, Funktion oder Befehl, der Ausdruck ist wahr.



ISTLESBAR Dateinamen

Wenn der Dateiname lesbar ist, ist der Ausdruck wahr.



ISSYMLINK Dateinamen

Wenn es sich bei der Datei um einen symbolischen Link handelt, ist der Ausdruck wahr.



IST SICHTBAR „Titel“

Wenn das angegebene Fenster sichtbar ist, ist der Ausdruck wahr. (Dies bedeutet, dass Windows das Sichtbarkeitsflag gesetzt hat; es bedeutet nicht, dass das Fenster unbedingt auf dem Desktop sichtbar ist.)



ISTBESCHREIBBAR Dateinamen

Wenn der Dateiname beschreibbar ist, ist der Ausdruck wahr.



ISHUNG „Titel“

Wenn das angegebene Fenster nicht reagiert, ist der Ausdruck wahr.

 

PLUGIN Modulen

Wenn das Plugin-Modul geladen ist, ist der Ausdruck wahr. Geben Sie keine Erweiterung (z. B. „.dll“) für den Modulnamen an.

 

Logische Ausdrücke

 

Ein logischer Ausdruck ist einer der folgenden:

 

 Ein Schritt        a relationaler Ausdruck

 Ein Schritt        a Statustest

 Ein Schritt         unärer logischer Operator NICHT (oder !) gefolgt von einem logischer Ausdruck

 Ein Schritt        XNUMX logischer Ausdrucks verbunden durch a binärer logischer Operator

 

Logische Operatoren

 

Operator

tippe

Verwendung

Wert ist TRUE, wenn

NICHT

einstellig

NICHT cond

cond ist falsch.

.UND.

binär

Bedingung1 .UND. Bedingung2

beide Bedingung1 und Bedingung2 sind wahr.

.ODER.

binär

Bedingung1 .ODER. Bedingung2

mindestens einer von Bedingung1 und Bedingung2 ist wahr.

.XOR.

binär

Bedingung1 .XOR. Bedingung2

eine Bedingung1 und Bedingung2 ist WAHR, und das andere ist FALSCH.

 

In diesem Beispiel wird ein Programm namens ausgeführt DATENLADEN wenn heute Montag oder Dienstag ist (geben Sie dies in eine Zeile ein):

 

if „%_dow“ == „Mon“ .or. „%_dow“ == „Di“ Datenlast

 

Testbedingungen werden immer von links nach rechts gescannt – das ist so keine implizite Rangfolge, wie es in einigen Programmiersprachen der Fall ist. Sie können jedoch eine bestimmte Testreihenfolge erzwingen, indem Sie Bedingungen beispielsweise in Klammern gruppieren (geben Sie dies in eine Zeile ein):

 

if (%a == 1 .or. (%b == 2 .and. %c == 3)) echo etwas

 

Logische Ausdrücke kombinieren

 

Klammern kann nur verwendet werden, wenn der Teil des Ausdruck innerhalb der Klammern enthält mindestens eines davon binäre logische Operatoren .und., .oder., oder .xor.. Klammern in einem einfachen Ausdruck, der nicht zwei oder mehr Tests kombiniert, werden als Teil der zu testenden Zeichenfolge betrachtet und führen wahrscheinlich dazu, dass der Test fehlschlägt. Der erste dieser Tests ist beispielsweise FALSCHder zweite ist TRUE:

 

(a == a)

(a == a .und. b == b)

 

Klammern können verschachtelt sein.

 

Beispiele

 

Dieses Batchdateifragment führt ein Programm namens aus WÖCHENTLICH wenn heute Montag ist:

 

if „%_dow“ == „mon“ wöchentlich

 

Dieses Batchdateifragment testet einen Zeichenfolgenwert:

 

Eingabe „Geben Sie Ihre Auswahl ein:“ %%cmd

if „%cmd“ == „WP“ gehe zu Wordproc

wenn „%cmd“ NE „GRAPHICS“ gehe zum badentry

 

Dieses Beispiel ruft auf GO.BTM wenn die ersten beiden Zeichen in der Datei MEINE DATEI sind GO:

 

if "%@left[2,%@line[myfile,0]]" == "GO" rufen Sie go.btm auf

 

Das erste Batchdateifragment unten testet die Existenz von A:\JAN.DOC bevor Sie es auf das Laufwerk kopieren C (Dadurch wird eine Fehlermeldung vermieden, wenn die Datei nicht existiert):

 

Wenn es sich um eine Datei a:\jan.doc handelt, kopieren Sie a:\jan.doc c:\

 

Dieses Beispiel testet den Exit-Code des vorherigen Programms und stoppt die gesamte Batchdateiverarbeitung, wenn ein Fehler aufgetreten ist:

 

Wenn errorlevel == 0, gehe zum Erfolg

echo „Externer Fehler; Batchdatei endet!“

stornieren