Was genau passiert, wenn Sie den Befehl 'copy /b' verwenden?

Heute habe ich gerade entdeckt, dass ich bestimmte Dateien mit dem Befehl copy /b zusammenführen kann. Insbesondere bemerkte ich, dass der VLC-Player beim Zusammenführen von zwei MP3-Dateien lustige Verhaltensweisen mit dem Timing zeigte:

             Eins

Hier ist es ganz normal, aber die erste Musik ging zu Ende... dann folgte der lustige Teil....

            Zwei              Drei

Hier lief die Zeit, als seek buchstäblich so lief, wie sie war spielend.

Beim Kombinieren von Bildern oder PDF mit dieser Technik habe ich festgestellt, dass die Dateigröße korrekt zunimmt, aber nur das erste Bild angezeigt wird.

Meine Frage lautet also: Was genau macht der Befehl copy /b? Ist es wirklich zum Zusammenführen von Dateien gedacht oder ist dies ein Hack?

Author: Chibueze Opata, 2012-07-25

4 answers

Das Flag /b des Befehls copy behandelt die Dateien als Binärdateien (dh einen rohen Strom bedeutungsloser Bytes) und kopiert sie Byte für Byte anstelle des Standardverhaltens (oder des Verhaltens /a) behandelt sie als Textzeilen (mit Zeilenende, Dateiende usw.)

Sie können Textdateien entweder mit dem Standardtextverhalten oder dem Binärschalter zusammenführen, aber so ziemlich jede Binärdatei funktioniert nicht. Sie können die Bytes nicht einfach aus zwei Binärdateien kopieren und erwarten um zu arbeiten, weil Binärdateien normalerweise Header haben, metadaten, datenstrukturen usw. das definiert das Format der Datei. Wenn Sie eine binäre Kopie machen, kopieren Sie einfach alle Bytes so wie sie sind, was dazu führt, dass diese Strukturen an Stellen platziert werden, an denen sie nicht sein sollten, also wenn Sie sie öffnen, wird die Parsing-Funktion Probleme haben und sehen, was im Wesentlichen korrupte Daten sind. Einige Programme ignorieren die Teile, die keinen Sinn ergeben, und zeigen einfach, was sie können (was ermöglicht Stereographie zu arbeiten), aber einige werfen einen Fehler und beschweren sich, dass die Datei beschädigt ist. Die Fähigkeit, Korruption zu erkennen, hängt vom Dateityp ab.

Als Beispiel erfinden wir ein vereinfachtes PDF-Format:

Byte(s)    Meaning
---------------------

File header:
0-1        # of Pages
2-3        Language
4-5        Font
6-EOF      Data (each page encoded separately)

Page data:
0-1        Page number
2-3        # of characters on page
4-#chars   Letters contained on the page

Wie Sie sehen, enthält jede Datei einen Header auf Dateiebene mit einigen allgemeinen Informationen, gefolgt von Datenblöcken für jede Seite, die die Seitendaten enthält. Wenn Sie dann zwei Dateien nehmen, die jeweils eine Seite enthalten, und sie als Binärdateien zusammenführen, werden Sie es nicht sein erstellen einer zweiseitigen Datei, sondern eine beschädigte Datei, die mit einer Seite beginnt, dann hat eine Reihe von Junk (der Datei-Header macht keinen Sinn, wenn das Programm versucht, Seite zwei zu lesen).

Das Gleiche passiert für Ihre MP3s. Wenn Sie sie so kombinieren, bleiben die ID3-Tags am Anfang und/oder Ende der zweiten Datei erhalten, und wenn der Player versucht, den nächsten Frame zu lesen, erwartet er Audiodaten, findet jedoch den Header der zweiten Datei, der nicht den Inhalt der zweiten Datei enthält. passen Sie das erwartete Format für Audiodaten an, damit es nicht weiß, was zu tun ist. Einige Player spielen den Header als Audiodaten ab (die wahrscheinlich als statisch/Rauschen/Pops/usw. abgespielt werden).), einige schneiden wird der Klang, bis das nächste richtige Rahmen, einige können aufhören zu spielen die Songs insgesamt, und einige können sogar Abstürzen.

Der Befehl copy weiß nichts über andere Dateitypen als Klartext (und selbst dann nur ASCII-Text), sodass nur Klartext korrekt damit kombiniert werden kann. Binärdateien müssen kombiniert werden verwenden eines Editors, der den Inhalt richtig analysieren und interpretieren kann.

 18
Author: Synetech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-07-25 03:50:21

In Ihrem Beispiel wird es bei MP3s wahrscheinlich zu seltsamen Verhaltensweisen kommen, da MP3s codiert werden. Die ID3v1-Tags sind beispielsweise die letzten 128 Bytes eines MP3 (z. B. Interpret, Album usw.). Diese Informationen sind nicht "spielbar". Wenn VLC oder ein anderer Media Player den MP3 öffnet, wird er (wahrscheinlich) den ersten MP3 abspielen, sich lustig für die Informationen verhalten und dann möglicherweise den Rest der Datei abspielen. Ich habe gerade kein Windows geladen, daher kann ich nicht sicher testen.

Würde ich angenommen, dies ist dasselbe wie Bilder und Filme; Abhängig davon, wie die Dateien codiert werden, hängt es davon ab, wie die Dateien "kombiniert"werden. Ich stelle mir vor, diese Funktionalität kam aus den Tagen von DOS, als alles im Klartext war

 1
Author: Canadian Luke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-07-25 03:34:34

Vor langer Zeit in den guten alten Win ME Tagen verwende ich einfach Videoclips zu verketten. Es hat nicht die ganze Zeit funktioniert, aber es hat einige Zeit funktioniert.

Dies ist ein Beispiel für den Befehl, den ich verwendet habe:

copy /b movie1.mpg + movie2.mpg + movie3.mpg movie4.mpg

Wenn die Filme nicht zu groß waren und alle den gleichen Typ, Bildrate usw., fusionierten sie in der Regel einwandfrei. Habe so etwas in letzter Zeit nicht versucht.

 1
Author: Terry Hollett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-26 19:22:05

In Bezug auf die MP3, ungefähr, was nach dem Header ist, können alle als Daten gelesen werden. Es gibt dieses Spiel, Sonic 3 Sega Genesis und ein weiteres Spiel namens Sonic & Knuckles". Die Sonic & Knuckles Originalpatrone hatte einen Steckplatz zum Einfügen anderer Spiele, aber wenn Sonic 2 und Sonic 3 hinzugefügt wurden,würde sich die Prüfsumme wahrscheinlich anders verhalten. In der frühen Phase der Verwendung von ROMs, wann immer wir zwei Patronen einsetzen wollten, um so zu arbeiten, wie es in der Hardware war, haben wir benutzt copy /b sonick.bin+sonic3.bin sonic3k.bin. Auf diese Weise würde ihre Zusammenführung zu einem großen einzelnen ROM führen, in dem sonick den Befehlssatz (Zeiger) hätte, damit sonic3-Ressourcen verwendet werden.

 -1
Author: Deise Candido,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-01-25 12:49:41