{title}

Hallo zusammen, ich habe eine Textdatei, die eine Reihe von Dateien und deren Speicherort enthält. (C: MyFolder myfile1.txt) Ich muss eine Batch-Datei erstellen, die die Dateinamen und den Speicherort der Textdatei liest und die tatsächlichen Dateien in einen Zielordner kopiert. Bisher habe ich herausgefunden, wie man den gesamten Ordner kopiert Aber das Problem ist, dass meine Liste ungefähr 600 Dateien enthält, während der gesamte Ordner Tausende von Dateien enthält. Irgendwelche Gedanken? Vielen Dank im Voraus

Bitte geben Sie das Format der Textdatei an.

Hat eine reine Textdatei (.txt) mehr als das reine ASCII-Format, das mit dem Editor geöffnet wird?

Ich glaube nicht, dass Sie das in Batch ohne ein externes Programm tun können

Sie meinen das Gleiche. Mit "Format" meine ich, enthält die Datei nur Pfad und Dateinamen wie folgt: C: Pfad zu Ordner Datei1C: Pfad zu Ordner Datei2C: Pfad zu Ordner Datei3C: Pfad zu Ordner file4etc?

Ich denke, das ist, was das orig-Plakat bedeutet, aber ich glaube nicht, dass Sie Dateien im Stapel lesen können, viel weniger analysieren sie

Woher in aller Welt haben Sie diese Idee?

batch ist als programmiersprache für den beginn der programmierung sehr wenig mächtig, nicht aber für komplexe programme und spiele

smeezekitty, ich schlage respektvoll vor, dass du nachdenkst, bevor du postest. auch du hast die spezifische Frage nicht beantwortet: Warum hast du das geschrieben:

Der Punkt, den ich machen wollte, ist, dass in einem solchen Hilfeforum ein "guter" Beitrag einer ist, bei dem Sie haben1. Lesen und verstehen Sie die ursprüngliche Frage.2. Kennen Sie die Antwort. Ein "schlechter" Beitrag ist einer, bei dem einer oder keiner von beiden zutrifft, zum Beispiel, bei dem Sie nur Dinge wie "Ich glaube nicht, dass Sie XYZ im Batch ausführen können" posten, besonders wenn Sie können es tatsächlich sehr einfach tun. Die Batch-Sprache eignet sich sehr gut für einfache Aufgaben wie das Lesen von Textdateien und das Parsen des Inhalts. Dafür wurde es entwickelt. Es ist nicht so gut, Sprite-Kollisionen zu erkennen oder 3D-Grafiken zu erstellen. Wir wissen das. Hier erfahren Sie, wie Sie eine Textdatei lesen und mit jeder Zeile, die sie enthält, etwas anfangen können: 1. Angenommen, dies ist der Inhalt der Textdatei: Code: C: Pfad zu Ordner Datei1C: Pfad zu Ordner Datei2C: Pfad zu Ordner Datei3C: Pfad zu Ordner Datei4Sie können sehen, dass dies der Fall ist eine Liste von Pfaden und Dateinamen, einer zu einer Zeile2. Nehmen wir weiter an, dass es My test file.txt heißt und sich im Ordner C: Myfolder.3 befindet. Angenommen, jede Zeile in der Datei verweist auf eine tatsächliche Datei und wir möchten jede Zeile in einen anderen Ordner mit dem Namen C: destination folder.4 kopieren. Hier ist eine Batch-Datei, in der jede Zeile der Datei gelesen wird: Code: @echo offset textfile = C: MeinOrdner Meine Testdatei.txtset destfolder = C: Zielordnerfür/f "delims =" %% F in ('type "% textfile%"') do (echo Kopieren von %% F copy "%% F" "% destfolder%")

Sie können einen Befehl in einer Steuerzeichenfolge einer for-Schleife verwenden, um sicherzustellen, dass C nicht analysiert werden kann, und das ist eine Textdatei

(Lästige Mehrfach-Fragezeichen wurden gelöscht.) Mit dem Befehl FOR/F können Sie die Ausgabe eines Befehls analysieren. FOR/F% Variable IN ('Befehl') DO Befehl egFOR/F "delims =" %% A in ('dir/b') do echo %% A Sie haben zwei verschiedene Verwendungen des Wortes 'parse' verwechselt .cmd.exe ist kein C-Interpreter. Niemand sagte, dass es das war.Smeexekitty, Sie zeigen eine erstaunliche Einstellung: Wissensverhältnis, das mich fragen lässt, ob Sie etwa 11 Jahre alt sind? Haben Sie jemals versucht, einige dieser Dinge zu erforschen?

aus: LachsforelleBei einer Reaktion darauf kann das Alter abgeschätzt werden. Zurück zum Thema: Bis wir ein Beispiel der Datei sehen, die wir verwenden, kann Ihnen niemand wirklich helfen. Nur ein SAMPLE, da wir keine 600 Zeilen benötigen, sollte 6 in Ordnung sein

Hey Leute, entspannt euch, es ist gut, über Lachsforellen zu debattieren, euer Code funktioniert gut! Sie können sich gar nicht vorstellen, wie nützlich das für mich ist. Sehr geschätzt! Der Grund, warum ich euch keine Probe meiner Liste gegeben habe, ist, dass ich mich entscheide, wie ich es machen soll. Es ist eigentlich egal, aber genau das hatte ich vor. Eine lange Liste von Dateinamen mit ihrem Speicherort. Noch eine Frage, obwohl ich dies gründlich testen werde. Die Dateien, die ich kopiere, sind jeweils viel größer als 2 GB. Können Sie Probleme damit vorhersehen? Erklären Sie mir bitte auch die Zeile for/f "delims =" %% F. Es ist eine Sache, etwas zu tun und eine andere, es zu verstehen. Nochmals vielen Dank!

Über 2gb? Abhängig von der Geschwindigkeit Ihres Computers kann dies eine Weile dauern. Der Befehl FOR wird auf vielfältige Weise zum Analysieren von Dingen verwendet. Ich bin müde und werde nicht stundenlang erklären, wie FOR funktioniert, aber ein anderes Mitglied kann.

Dies sollte es tun. Code: FOR/F% Variable IN (Dateigruppe) DO-Befehl FOR/F% Variable IN ("String") DO-Befehl FOR/F% Variable IN ('Befehl') DO-Befehl oder, falls die Option usebackq vorhanden ist : FOR/F% variable IN (Dateigruppe) DO-Befehl FOR/F% variable IN ('string') DO-Befehl FOR/F% variable IN (`command`) DO-Befehl dateinamensatz ist ein oder mehrere Dateinamen. Jede Datei wird geöffnet, gelesen und verarbeitet, bevor mit der nächsten Datei im Dateinamensatz fortgefahren wird. Die Verarbeitung besteht darin, die Datei einzulesen, in einzelne Textzeilen aufzuteilen und dann jede Zeile in null oder mehr Token zu zerlegen. Der Rumpf der for-Schleife wird dann mit den Variablenwerten aufgerufen, die auf die gefundenen Tokenzeichenfolgen gesetzt sind. Standardmäßig übergibt/F das erste leere, von jeder Zeile jeder Datei getrennte Token. Leerzeilen werden übersprungen. Sie können das Standard-Parsing-Verhalten überschreiben, indem Sie den optionalen Parameter "options" angeben. Dies ist eine d-Zeichenfolge, die ein oder mehrere Schlüsselwörter enthält, um verschiedene Analyseoptionen anzugeben. Die Schlüsselwörter sind: eol = c - Gibt ein Kommentarzeichen für das Zeilenende (nur ein Zeichen) an. Skip = n - Gibt die Anzahl der Zeilen an, die am Anfang der Datei übersprungen werden sollen. delims = xxx - Gibt einen Begrenzersatz an. Dies ersetzt den Standardtrennzeichensatz für Leerzeichen und Tabulatoren. tokens = x, y, m-n - Gibt an, welche Token aus jeder Zeile für jede Iteration an den for-Body übergeben werden sollen. Dadurch werden zusätzliche Variablennamen zugewiesen. Die m-n-Form ist ein Bereich, der die m-ten bis n-ten Token angibt. Wenn das letzte Zeichen in der Zeichenfolge tokens = ein Stern ist, wird eine zusätzliche Variable zugewiesen und der verbleibende Text in der Zeile nach dem letzten analysierten Token empfangen. usebackq - Gibt an, dass die neue Semantik in Kraft ist. Dabei wird eine hintere d-Zeichenfolge als Befehl und eine einzelne d-Zeichenfolge als Literalzeichenfolgenbefehl ausgeführt und ermöglicht die Verwendung von double s für Dateinamen im Dateinamensatz. Einige Beispiele könnten helfen: FOR/F "eol =; tokens = 2,3 delims =,"% i in (myfile.txt) do @echo% i% j% k würde jede Zeile in myfile.txt analysieren und dabei die Zeilen ignorieren Beginnen Sie mit einem Semikolon und übergeben Sie das zweite und dritte Token von jeder Zeile an den For-Body. Die Token werden durch Kommas und/oder Leerzeichen getrennt. Beachten Sie, dass die for body-Anweisungen auf% i verweisen, um das 2. Token abzurufen,% j, um das 3. Token abzurufen, und% k, um alle verbleibenden Token nach dem 3. Token abzurufen. Für Dateinamen, die Leerzeichen enthalten, müssen Sie die Dateinamen mit Doppel-s bezeichnen. Um double s auf diese Weise zu verwenden, müssen Sie auch die Option usebackq verwenden. Andernfalls wird double s als Definition einer zu analysierenden Literalzeichenfolge interpretiert. % i wird in der for-Anweisung explizit deklariert und% j und% k werden implizit über die tokens = -Option deklariert. Sie können bis zu 26 Token über die Zeile tokens = angeben, vorausgesetzt, es wird nicht versucht, eine Variable zu deklarieren, die höher als der Buchstabe 'z' oder 'Z' ist. Denken Sie daran, dass FOR-Variablen aus einem Buchstaben bestehen, zwischen Groß- und Kleinschreibung unterscheiden und global sind. Es können nicht mehr als 52 Variablen gleichzeitig aktiv sein. Sie können die FOR/F-Parsing-Logik auch für eine unmittelbare Zeichenfolge verwenden, indem Sie den Dateinamenssatz zwischen den Klammern mit einzelnen Zeichen zu einer d-Zeichenfolge machen. Es wird als einzelne Eingabezeile aus einer Datei behandelt und analysiert. Schließlich können Sie den Befehl FOR/F verwenden, um die Ausgabe eines Befehls zu analysieren. Sie tun dies, indem Sie den Dateinamenssatz zwischen den Klammern zu einer Zeichenkette machen. Es wird als Befehlszeile behandelt, die an eine untergeordnete CMD.EXE übergeben wird, und die Ausgabe wird im Speicher erfasst und wie eine Datei analysiert. Das folgende Beispiel lautet also: FOR/F "usebackq delims =="% i IN (`set`) DO @echo% i würde die Umgebungsvariablennamen in der aktuellen Umgebung auflisten. Außerdem wurde die Substitution von FOR-Variablenreferenzen verbessert. Sie können jetzt die folgende optionale Syntax verwenden:% ~ I ​​- Erweitert% I. Entfernen aller umgebenden s (")% ~ fI - Erweitert% I zu einem vollständig qualifizierten Pfadnamen.% ~ DI - Erweitert% I nur zu einem Laufwerksbuchstaben.% ~ pI - erweitert% I nur auf einen Pfad% ~ nI - erweitert% I nur auf einen Dateinamen% ~ xI - erweitert% I nur auf eine Dateierweiterung% ~ sI - erweiterter Pfad enthält nur Kurznamen% ~ aI - erweitert% I Dateiattribute der Datei% ~ tI - Erweitert% I auf Datum/Uhrzeit der Datei% ~ zI - Erweitert% I auf Größe der Datei% ~ $ PATH: I - Durchsucht die in der Umgebungsvariablen PATH aufgelisteten Verzeichnisse und erweitert% I auf Der vollständig qualifizierte Name des zuerst gefundenen. Wenn der Name der Umgebungsvariablen nicht definiert ist oder die Datei bei der Suche nicht gefunden wird, wird dieser Modifikator zu einer leeren Zeichenfolge erweitert. Die Modifikatoren können zu ge kombiniert werden t zusammengesetzte Ergebnisse:% ~ dpI - erweitert% I nur um einen Laufwerksbuchstaben und einen Pfad% ~ nxI - erweitert% I nur um einen Dateinamen und eine Erweiterung% ~ fsI - erweitert% I nur um einen vollständigen Pfadnamen mit Kurznamen% ~ dp $ PATH: I - Durchsucht die in der Umgebungsvariablen PATH aufgelisteten Verzeichnisse nach% I und erweitert sie auf den Laufwerksbuchstaben und den Pfad des zuerst gefundenen. % ~ ftzaI - Erweitert% I zu einer DIR-ähnlichen Ausgabezeile. In den obigen Beispielen können% I und PATH durch andere gültige Werte ersetzt werden. Die% ~ -Syntax wird durch einen gültigen FOR-Variablennamen abgeschlossen. Wenn Sie Variablennamen in Großbuchstaben wie% I auswählen, wird die Lesbarkeit verbessert und Verwechslungen mit den Modifikatoren vermieden, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird.

Hey, vielen Dank für all dieses Detail!

Gehen Sie einfach zur Eingabeaufforderung und geben Sie "for /?"

Für manche Menschen scheint es wie Zauberei.

Aber es ist magisch! Übrigens, ich weiß, dass ich hier mein Glück treibe, ist es jedoch irgendwie möglich, die Gesamtdauer des Kopiervorgangs herauszufinden? d.h. die Start- und Endzeit ???

Code: setze Zeit1 =% Zeit% dein Prozess ist vorbei Zeit2 =% Zeit% Echo gestartet% Zeit1% Echo beendet% Zeit2%

Der Kopiervorgang wird im Grunde genommen gestartet und sobald alle Dateien kopiert wurden, wird cmd geschlossen. Daher kann nicht wirklich festgestellt werden, ob die für den Vorgang benötigte Zeit angegeben wurde. Irgendwelche Gedanken? Vielen Dank im Voraus! Bearbeiten: Fertig! Am Ende des Skripts wurde eine pause-Anweisung hinzugefügt, und ich kann jetzt bestätigen, dass es einwandfrei funktioniert! Vielen Dank nochmal.

Du machst es falsch!

Interessanter Lol

.

Was ist der Punkt? Es ist nicht witzig

Homer ist der lustigere von beiden. (Könnte noch besser sein, wenn der Soldat versucht hätte, einen Pfeil aus der Gewehrschlinge zu schießen.) Stürze bringen mich im Allgemeinen nicht zum Lachen, aber das bin nur ich. (Normalerweise, wenn ich im Bann der Kombination aus plötzlichem Verlust des Gleichgewichts und der Schwerkraft bin, denke ich nicht bei mir: "Wir haben jetzt Spaß!")

Ich habe nicht auf Homers geklickt, keine Ahnung warum, aber ich mag es nicht, Dinge wie Eigensinne zu öffnen, ich bevorzuge Dinge, die direkt vor mir liegen.

du meine Güte!!!!!! das war witzig! und ihre Freundin steht nur da und lacht und macht sich nicht die Mühe, die Sicherheitssache herauszuholen.

Netter Homer!

Beliebte Beiträge