Wie würde ich jede Zeile in ein text-Dokument in separate Variablen mittels batch?
Wie würde ich jede Zeile in ein text-Dokument in separate Variablen mittels Batch? Ich weiß, wie ich eine variable in der ersten Zeile des text-Dokument mit:
Set /p Variable=<Test.txt
...aber ich weiß nicht, wie zu Lesen andere Zeilen der Datei. Sagen wir zum Beispiel, hatte ich ein text-Dokument mit 3 Zeilen, die erste Zeile hatte "Äpfel" steht auf, die zweite hatte 'Bananas', und die Dritte hatte 'Birnen', und können sagen, das Dokument aufgerufen wurde Fruit.txt. Wie würde ich die variable 'Line_1", um die erste Zeile des Dokuments 'Line_2' in der zweiten Zeile 'Line_3' in der letzten Zeile?. Nur um es einfach zu halten, können nur sagen, dass die batch-Datei und Fruit.txt sind beide im selben Ordner. Ich will nicht, dies zu tun, die in VBScript, also bitte nur post-Batch-code. Ich hätte gedacht, es wäre so etwas wie:
@Echo off
Set /p Line_1=<Fruit.txt:1
Set /p Line_2=<Fruit.txt:2
Set /p Line_3=<Fruit.txt:3
Echo Fruit 1 is %Line_1%, Fruit 2 is %Line_2% and Fruit 3 is %Line_3%
Pause
Exit
...aber ganz eindeutig ist es nicht. Keine Hilfe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: Dies ist für die willkürliche-Länge-Dateien, dann. jeb hat eine Antwort löst Ihr problem für eine bekannte Anzahl von Zeilen. Ich lasse das hier, obwohl, wie ich hasse posts löschen ich habe einige Zeit in für die Erklärung 🙂
Gut, Sie müssen natürlich eine Art von counter. Beginnen wir mit 1:
Dann müssen Sie gehen-Zeile-Weise durch die Datei:
Speichern Sie dann die Linie in einer nummerierten Variablen (das ist, was wir haben, wird der Zähler für):
uuuuund, erhöht sich der Zähler:
... Und das ist es. Fügen Sie ein paar mehr Dinge notwendig, Sie wissen, die langweiliger Kram, der immer in solchen Fällen erforderlich (seltsame Aussagen vor und nach, block-Begrenzer, etc.), und fertig:
Einige Erklärungen:
set /p Var=<file
wird die variable, um die erste Zeile einer Datei, die Sie notiert haben. Das funktioniert, weilset /p
wird prompt für die Eingabe und die< file
wird die Umleitung der Datei in die Standardeingabe eines Befehls. Soset /p
interpretiert den Inhalt der Datei als input eingegeben, bis der Nutzer die Zurück (D. H. die Datei enthält eine Zeile, Pause). Das ist, warum Sie bekommen die erste Zeile. Das system werfen würde die ganze Datei inset /p
aber da der Befehl liest nur die erste Zeile, und dann wird getan, Sie Holen Sie einfach verworfen.Die syntax, die Sie waren, schlägt es gibt tatsächlich für den Zugriff auf Alternate Data Streams von Dateien auf NTFS, das ist somethhing völlig anders.
<short-detour>
Jedoch jeb hat eine Art, die zu Lesen mehrere Zeilen. Dies funktioniert, da der block (getrennt durch Klammern) ist ein single-Befehl (siehe unten) leiten Sie den Inhalt einer Datei in. Außer, dass der Befehl besteht aus mehreren Anweisungen, die in jedem Lesen einer einzigen Zeile, und speichern Sie es Weg.</short-detour>
Das bringt uns zu
for /f
was durchläuft den Inhalt einer Datei (oder die Ausgabe eines Befehls) Zeile für Zeile ein und führt einen Befehl oder ein block von Befehlen für jede Zeile. Wir können jetzt Lesen Sie die ganze Datei in so viele Variablen wie es Zeilen gibt. Wir brauchen nicht einmal zu wissen, wie viele im Voraus.Wie Sie vielleicht bemerkt haben
Line_!Counter!
in es die verwendetCounter
ein wenig anders aus, wie Sie es gewohnt sind, Umgebungsvariablen zu verwenden, denke ich. Dies wird als verzögerte Erweiterung und ist notwendig, in einigen Fällen, aufgrund wiecmd
analysiert und führt die batch-Dateien. Umwelt-Variablen in einem Befehl erweitert werden, um Ihre Werte auf Analyse, der Befehl. In diesem Fall wird der ganzefor /f
einschließlich der block enthält zwei Aussagen ist einem einzigen Befehl fürcmd
. Also, wenn wir%Counter%
es würde ersetzt werden durch den WertCounter
hatte vor der Schleife (1
) und ändern sich nie, während die Schleife ausgeführt wird (wie es einmal geparsed und mehrmals ausgeführt. Verzögerte expansion (signalisiert durch die Verwendung!
statt%
für variable zugreifen, änderungen und erweitert die Umgebungsvariablen, die kurz vor der Ausführung eines Befehls.Dies ist fast immer notwendig, wenn Sie eine variable innerhalb einer Schleife und verwenden Sie es innerhalb der Schleife wieder. Auch dies macht es notwendig, zunächst die verzögerte Erweiterung, das mit der
setlocal
Befehl und ein entsprechendes argument:set /a
werden arithmetische Operationen ausgeführt werden. Wir verwenden es hier, um die SchrittweiteCounter
durch eine für jede Zeile zu Lesen.set/p
, Lesen Sie meine Antwort so Lesen Sie eine Datei mitset/p
🙂Lesen mehrere Zeilen mit
set/p
müssen Sie Klammern um dieset/p
block.