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 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 niemals empfohlen.
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.
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.
DEFINIERTE 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. |
Ein logischer Ausdruck ist einer der folgenden:
unärer logischer Operator NICHT (oder !) gefolgt von einem logischer Ausdruck
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.
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