Wie kann ich eine Array-Variable in einem DOS-Batch-Skript einrichten? Ich möchte es mit einer Liste der zu verarbeitenden Dateinamen laden. Ich möchte das wirklich so einfach wie möglich halten. Vielen Dank.
33
Wie kann ich eine Array-Variable in einem DOS-Batch-Skript einrichten? Ich möchte es mit einer Liste der zu verarbeitenden Dateinamen laden. Ich möchte das wirklich so einfach wie möglich halten. Vielen Dank.
Antworten:
Ich habe es herausgefunden:
Ich habe so etwas vor einigen Jahren gemacht, also musste ich es erst herausfinden. (Übrigens hasse ich es, das Rad neu zu erfinden.) Jetzt, da es hier veröffentlicht ist, werden es hoffentlich auch andere nützlich finden.
quelle
()
Syntax unterstützt werden.FILE_LIST[0]
.Ja, Sie können Arrays im Batch erstellen. Obwohl sie nicht wie Arrays in C oder VB sind, können Sie dies tun:
quelle
In Jakash3s Blog beschreibt Arrays in Batch , wie Arrays in der Eingabeaufforderung emuliert werden.
In dem Artikel ist eine Batchdatei mit dem Namen array.bat enthalten, die eine Bibliothek mit Funktionen zum Verarbeiten von Arrays enthält. Sie müssen den Text im Artikel auswählen und in die bat-Datei einfügen.
Zum Beispiel das folgende Testskript:
erzeugt die folgende Ausgabe:
quelle
Dies füllt ein Array und druckt es
Sie könnten anstelle von names [1] names [2] names [3] names1 names2 names3 verwenden, indem Sie names! I! anstelle von Namen [! i!]. Es erzeugt das Array durch Generieren von Variablennamen. Im Batch gibt es keine Array-Struktur. Aber es ist so ordentlich wie jede Array-Struktur, und das Auffüllen oder Drucken sieht genauso aus wie das Auffüllen oder Drucken eines Arrays in einer geeigneten Sprache (die tatsächlich die Array-Struktur hat!).
die Ausgabe-
Einige Erklärungen
Das
setlocal enabledelayedexpansion enableextensions
mit dem! Var! Statt% var% ist erforderlich, um ungewöhnliches Verhalten zu verhindern, damit sich Variablen innerhalb eines FOR oder eines IF ordnungsgemäß verhalten. Es ist eine Kuriosität mit Batch-Dateien. Sehenset /?
wo das weiter erwähnt wird.Dies ist es, was das Array ausfüllt und ist für jeden, der sich mit Arrays auskennt, ziemlich einfach. Sie könnten es auch tun,
names[0]=bob
names[1]=tom
names[2]=joseph
obwohl eine der Schönheiten eines Arrays die Fähigkeit ist, ein Array mit einer Schleife zu füllen, was ich hier getan habe.Dies zeigt das Array an. %% f, wenn Sie es wiederholen, werden Sie in Schritten von 1 von 0 bis zum letzten Index des Arrays gehen. So werden Namen [0] Namen [1] Namen [2] gedruckt
quelle
Was Sie tun möchten, ist die Verwendung einer Eingabevariable für jeden Dateinamen, die Sie mit den Variablen% 1% 2 usw. abrufen können, z. B .: mybat.bat file1.nam file2.nam etc ..
Sie können diese Variablen dann in einer Schleife verwenden, müssen jedoch nur% 1 als Hauptparameter verwenden, da Sie mit UMSCHALT die anderen Variablen an die 'Position' von% 1 bringen können, wobei ein Test auf Null (Ende von Variablen) mit etwas ausgeführt wird wie WENN "X% 1" == "X"
z.B:
quelle
Wenn Sie die Dateiliste
FOR
in der Datei filelist.txt speichern, können Sie jede Zeile der Datei lesen und verarbeiten, zUm jede Zeile einer Datei zu drucken (bis zum ersten "|" in der Zeile. Wenn Sie kein eigenes Trennzeichen angeben, werden Leerzeichen und Tabulatoren verwendet. Wenn Ihre Pfade also keine Leerzeichen enthalten, müssen Sie ein Zeichen angeben das wird nicht in der Datei angezeigt, um vollständige Zeilen zu erhalten).
quelle
In einem Ihrer Kommentare zu einer Antwort sagen Sie:
Ich glaube, was Sie suchen, ist ein Makefile und möglicherweise Cygwin, um Ihnen eine anständige Shell (bash oder was auch immer Ihr Geschmack) zu geben.
quelle
Ersetzen Sie Zeichenfolgen und Buchstaben im Text.
Versuchen Sie es mit einer for-Schleife, indem Sie den Text zu a for body erweitern und var durch var ersetzen. Ziehen Sie die Textdatei, und legen Sie sie ab, sodass% 1 eine Benutzereingabe ist, indem Sie den Befehl set aufrufen.
quelle
So etwas in einer Batch-Datei? Wählen Sie eine Datei in einem Ordner. << ist Kommentar, kein Code
quelle
Sie können nicht wirklich ein Array in der Eingabeaufforderung (und es ist auch nicht wirklich DOS, wenn Sie Windows 3.1 ausführen). Mit dem Befehl FOR können Sie jedoch eine satzbasierte Verarbeitung durchführen .
Um die Liste der zu verarbeitenden Dateien zu erstellen, können Sie manuell eine zu verarbeitende Textdatei erstellen oder den
dir /b <mask>
Befehl in der FOR-Schleife verwenden.Etwas, das ich auf die harte Tour mit FOR gelernt habe - Sie müssen eine SINGLE CHARACTER- Variable als Cursor verwenden!
quelle
Lesen Sie die Microsoft-Dokumentation zum Befehl FOR batch . Mit FOR können Sie eine Reihe von Verzeichnissen, Dateien in einem Verzeichnis oder Dateien in einem Verzeichnis und all seinen Unterverzeichnissen durchlaufen.
Standardmäßig werden FOR-Handles gesetzt oder nur Dateien:
Oder für rekursive:
oder nur für Verzeichnisse:
quelle
Dies ist eine kleine Debug-Datei, die ich vor einiger Zeit erstellt habe, um das Array aus meinem Tic Tac Tow-Spiel in BATCH / CMD zu testen. Es kann in und aus einem Array lesen und schreiben, ohne dass der Code zu groß und zu kompliziert wird.
es zu benutzen ist einfach:
In ein Array schreiben
Aus einem Array lesen
Code:
quelle