Gibt es eine Möglichkeit, Dateien effizient mit dem DOS-Kopierbefehl anzufügen?

58349
clsturgeon

Verwenden der DOS-Befehlssyntax zum Verketten von Dateien:

copy file1.txt+file2.txt all.txt 

Ich weiß ich kann das...

copy file1.txt+file2.txt file1.txt 

Ist das effizient? Ist es das, was ich erwarte? Es funktioniert, aber ich möchte wissen, ob es tatsächlich an file1.txt anhängt oder kopiert file1.txt (schlecht), file2 verkettet und dann in file1.txt umbenannt wird (was nicht effizient ist).

5
Beachten Sie als Randbemerkung, dass Sie die Option "/ b" verwenden müssen, wenn Sie sich für die Verwendung von Copy to Cat-Binärdateien entscheiden. Brian Knoblauch vor 13 Jahren 2
Niemand scheint hier zu glauben, dass der Fall "großer Dateien" es wert ist, angesprochen zu werden oder eine Lösung zu finden. Milind R vor 9 Jahren 1

3 Antworten auf die Frage

9
Tyler

copykopiert file1.txtund file2.txtin den Speicher, verkettet sie und schreibt sie aus file1.txt. Es wird nicht in eine neue Datei kopiert und die Datei umbenannt, so dass wirklich keine zusätzlichen Festplatten-E / A vorhanden sind.

Sie können auch verwenden type.

type file2.txt >> file1.txt 

Der >>Operator hängt Text an. Aber das funktioniert natürlich nicht für Binärdateien.

es sollte für binäre Dateien gut funktionieren. Dies ist im Allgemeinen nicht nützlich, da die meisten binären Datenformate eine Form der Einkapselung verwenden, sodass selbst in der kombinierten Datei nur die erste Datei erkannt und verwendet wird. Wenn Sie beispielsweise zwei unformatierte PCM-Dateien hätten, wäre dies eine gute Möglichkeit, sie zu verketten (im Gegensatz zu zwei WAV-Dateien, bei denen ein anderes Programm zum Ändern der Header benötigt wird). quack quixote vor 14 Jahren 3
Ich habe den Begriff sehr lose umbenannt. Wenn file1 und file2 riesige Dateien sind, möchte ich, dass file2 an file1 angehängt wird, OHNE alle file1-Daten zu kopieren (es ist zu groß, um es erneut zu kopieren). Tyler, du hast vorgeschlagen, dass file1.txt-Daten kopiert werden. Wird der type-Befehl verwendet, wird dieser tatsächlich angehängt? Vielen Dank. clsturgeon vor 14 Jahren 1
Seien Sie jedoch gewarnt, dass alte DOS-Versionen ein Ziel nicht mit Kopierquelle + Quelle für andere Dateien in das Ziel kopieren konnten. Dies führte zu einer 64-kB-Quelldatei, da zum Lesen und Schreiben ein 64-kB-Puffer verwendet wurde. Nach dem ersten Flush betrug die Quelle nur 64 kB :-), kein Witz. TheBlastOne vor 12 Jahren 0
*> copy kopiert… in den Speicher, verkettet sie und schreibt sie in file1.txt. Es wird nicht in eine neue Datei kopiert und die Datei dann umbenannt. Es gibt also nicht viel zusätzliche E / A-Vorgänge. * Dies kann für kleine Dateien zutreffen, aber definitiv nicht für Dateien mit einer signifikanten Größe. Was ist, wenn die beiden Dateien sehr groß sind? Führen Sie einen Test durch, und Sie werden feststellen, dass die Speichernutzung während der Umleitung nicht ** steigt. Daher kombiniert es sie nicht im Gedächtnis. Und natürlich kann sie nicht mit der Originaldatei kombiniert werden, da sie noch nicht vollständig gelesen wurde und daher * eine * temporäre Datei / Pipe verwendet. Synetech vor 11 Jahren 1
2
Synetech

Ist das effizient?

Sicher. Die Verwendung des /bSwitches kann / kann jedoch die Leistung erhöhen, indem die Bytes einfach verkettet werden, anstatt die Dateien als Text zu verarbeiten. Dies macht sich besonders beim Verketten sehr großer Textdateien bemerkbar.

Ist es das, was ich erwarte?

Normalerweise ja, aber wenn die Datei in Linux, Mac oder einem anderen System mit unterschiedlichen Datei- / Zeilenabschlusszeichen erstellt wurde, kann dies zu unerwarteten Ergebnissen führen. Es empfiehlt sich, den /bSchalter im Allgemeinen auch für Textdateien zu verwenden.

Ich möchte wissen, hängt es tatsächlich an file1.txt an oder kopiert es file1.txt (schlecht), verkettet file2 und dann umbenannt in file1.txt (was nicht effizient ist)?

Ja, es wird eine neue, temporäre Datei erstellt, das Original gelöscht und die temporäre Datei in den ursprünglichen Namen umbenannt. Das Löschen und Umbenennen dauert jedoch keine Zeit, und wenn die Originaldatei nicht massiv ist, wird normalerweise nicht einmal die (redundante) Datei bemerkt ) Kopieren der Originaldatei.

0
Wilson

Wenn sie dieselbe Erweiterung haben, können Sie dies tun -

Typ *.txt >> fileout.tmp.

Dann benennen Sie fileout.tmpdie entsprechende Erweiterung um.