Mit zunehmender Erfahrung im Umgang mit Batchdateien werden Sie wahrscheinlich feststellen, dass Sie Textzeichenfolgen manipulieren müssen. Vielleicht müssen Sie einen Benutzer nach einem Namen oder Kennwort fragen, eine Liste von Dateien verarbeiten oder einen Namen in einer Telefonliste suchen. All dies sind Beispiele für die Verarbeitung von Zeichenketten - die Manipulation von lesbarem Text.
TCC enthält mehrere Funktionen, die die Verarbeitung von Zeichenketten erleichtern. So können Sie beispielsweise die Befehle INPUT, MSGBOX und QUERYBOX für Benutzereingaben, die Befehle ECHO und ECHOERR, ECHOS und ECHOSERR, SCREEN, SCRPUT und VSCRPUT für Ausgaben und den Befehl FOR oder die Funktion @FILEREAD zum Durchsuchen der Zeilen einer Datei verwenden . Darüber hinaus bieten die Variablenfunktionen eine breite Palette von Möglichkeiten zur Behandlung von Zeichenketten und Zeichen.
Nehmen wir zum Beispiel an, Sie benötigen eine Batch-Datei, die einen Benutzer nach einem Namen fragt, den Namen in einen Vor- und einen Nachnamen aufteilt und dann ein hypothetisches LOGIN-Programm ausführt. LOGIN erwartet die Syntax /F:Vorname /L:Nachname, wobei sowohl der Vor- als auch der Nachname in Großbuchstaben geschrieben werden und keiner der beiden Namen länger als 8 Zeichen ist. Hier ist eine Möglichkeit, eine solche Batch-Datei zu schreiben:
@echo off
setlocal
unalias *
input Enter your name (no initials): %%name
set first=%@word[0,%name]
set flen=%@len[%first]
set last=%@word[1,%name]
set llen=%@len[%last]
iff %flen gt 8 .or. %llen gt 8 then
echo First or last name too long
quit
endiff
login /F:%@upper[%first] /L:%@upper[%last]
endlocal
Der Befehl SETLOCAL am Anfang dieser Batch-Datei speichert die Umgebung und die Aliasnamen. Dann entfernt der Befehl UNALIAS * alle vorhandenen Aliase, damit sie das Verhalten der Befehle im Rest der Batch-Datei nicht beeinträchtigen. Der erste Zeilenblock endet mit einem INPUT-Befehl, der den Benutzer auffordert, einen Namen einzugeben. Die Eingabe des Benutzers wird in der Umgebungsvariablen NAME gespeichert.
Der zweite Zeilenblock extrahiert den Vor- und Nachnamen des Benutzers aus der Variablen NAME und berechnet die Länge der beiden Namen. Er speichert den Vor- und Nachnamen zusammen mit der jeweiligen Länge in weiteren Umgebungsvariablen. Beachten Sie, dass die Funktion @WORD das erste Wort als 0 und nicht als 1 nummeriert.
Der IFF-Befehl im dritten Zeilenblock prüft die Länge des Vor- und Nachnamens. Wenn einer der beiden länger als 8 Zeichen ist, zeigt die Batch-Datei eine Fehlermeldung an und endet. (QUERYBOX kann die Länge des Eingabetextes einfacher mit dem Schalter/L begrenzen. Wir haben oben eine etwas umständlichere Methode verwendet, um die Verwendung von Stringfunktionen in Batchdateien zu demonstrieren.)
Im letzten Block schließlich führt die Batch-Datei das Programm LOGIN mit den entsprechenden Parametern aus und stellt dann mit dem Befehl ENDLOCAL die ursprüngliche Umgebung und die Alias-Liste wieder her. Gleichzeitig verwirft ENDLOCAL die temporären Variablen, die die Batchdatei verwendet hat (NAME, FIRST, FLEN usw.).
Bei der Verarbeitung von Zeichenketten müssen Sie auch einige häufige Fallen vermeiden. Die größte davon ist der Umgang mit Sonderzeichen.
Angenommen, Sie haben eine Stapeldatei mit diesen beiden Befehlen, die einfach eine Zeichenkette annehmen und ausgeben:
input Enter a string: %%str
echo %str
Diese Zeilen sehen sicher aus, aber was passiert, wenn der Benutzer die Zeichenfolge "some > none" (ohne Anführungszeichen) eingibt? Nachdem die Zeichenkette in die Variable STR eingefügt wurde, wird die zweite Zeile zu
echo some > none
Das">" ist ein Umleitungssymbol, d. h. die Zeile gibt die Zeichenkette "some" aus und leitet sie an eine Datei namens NONE weiter - wahrscheinlich nicht das, was Sie erwartet haben. Sie könnten versuchen, diese Art von Problem durch doppelte Anführungszeichen zu vermeiden, aber das wird nicht ganz funktionieren. Wenn Sie Anführungszeichen verwenden (ECHO `%STR`), gibt der Befehl die vierstellige Zeichenkette %STR aus. Die Namen von Umgebungsvariablen werden nicht expandiert, wenn sie in Anführungszeichen stehen.
Wenn Sie doppelte Anführungszeichen verwenden (ECHO "%STR"), wird die vom Benutzer eingegebene Zeichenkette ordnungsgemäß angezeigt, und die doppelten Anführungszeichen werden ebenfalls angezeigt. Mit doppelten Anführungszeichen würde die Ausgabe wie folgt aussehen:
"some > none"
Wie Sie sich vorstellen können, wird diese Art von Problem noch viel schwieriger, wenn Sie versuchen, Text aus einer Datei zu verarbeiten. Sonderzeichen im Text können in Ihren Stapeldateien für allerlei Verwirrung sorgen. Text, der Anführungszeichen, doppelte Anführungszeichen oder Umleitungssymbole enthält, kann praktisch nicht korrekt verarbeitet werden.
Eine Möglichkeit, diese potenziellen Probleme zu umgehen, besteht darin, den Befehl SETDOS /X zuverwenden , um Umleitungssymbole und andere Sonderzeichen vorübergehend zu deaktivieren. Die obige zweizeilige Stapeldatei würde viel eher zu den erwarteten Ergebnissen führen, wenn sie auf diese Weise umgeschrieben würde:
setdos /x-15678
input Enter a string: %%str
echo %str
setdos /x0
Die erste Zeile schaltet die Alias-Verarbeitung aus und deaktiviert mehrere Sonderzeichen, darunter das Befehlstrennzeichen und alle Umleitungssymbole. Sobald die Zeichenkette verarbeitet wurde, aktiviert die letzte Zeile wieder die Funktionen, die in der ersten Zeile ausgeschaltet wurden.
Wenn Sie erweiterte Funktionen zur Verarbeitung von Zeichenketten benötigen, die über die Möglichkeiten von TCC zur Verfügung stehen, sollten Sie die Sprachen Lua, Perl, Python, REXX oder Ruby verwenden . Unsere Produkte können Lua-, Perl-, Python-, REXX- und Ruby-Programme intern ausführen und unterstützen auch die interne Auswertung einzelner Perl-, Python-, REXX- und Ruby-Ausdrücke.