Cosa succede esattamente quando si usa il comando 'copia / b'?


13

Oggi, ho appena scoperto che avrei potuto unire alcuni file usando il copy /bcomando. In particolare, ho notato che quando ho unito due file mp3, il lettore VLC ha mostrato comportamenti divertenti con i tempi:

             Prendi 1

Qui è abbastanza normale ma la prima musica stava per finire ... poi è seguita la parte divertente ...

            Prendi 2              Prendi 3

Qui, la ricerca del tempo stava letteralmente correndo mentre suonava.

Combinando immagini o PDF con questa tecnica, ho scoperto che ci sarà un corretto aumento delle dimensioni del file, ma verrà visualizzata solo la prima immagine.

Quindi la mia domanda è: cosa fa esattamente il copy /bcomando? È davvero pensato per essere usato per unire file o è un hack?

Risposte:


17

Il /bflag del copycomando tratta i file come binari (ovvero un flusso non elaborato di byte senza senso) e li copia byte per byte anziché il /acomportamento predefinito (o il ) che li tratta come righe di testo (con fine riga caratteri, fine file, ecc.)

È possibile unire i file di testo con il comportamento del testo predefinito o l'interruttore binario, ma praticamente qualsiasi file binario non funzionerà. Non puoi semplicemente copiare i byte da due file binari e aspettarti che funzionino perché i file binari di solito hanno intestazioni , metadati , strutture di dati, ecc. che definiscono il formato del file. Se fai una copia binaria, copierai semplicemente tutti i byte così com'è che finisce per mettere queste strutture in luoghi che non dovrebbero essere, quindi quando li apri, la funzione di analisi avrà problemi e vedrai quali sono essenzialmente i dati corrotti . Alcuni programmi ignoreranno le parti che non hanno senso e mostreranno semplicemente ciò che possono (il che consente alla stereografia di funzionare), ma alcuni genereranno un errore e si lamenteranno che il file è corrotto. La capacità di rilevare la corruzione dipende dal tipo di file.

Ad esempio, inventiamo un formato PDF semplificato:

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

Come puoi vedere, ogni file conterrà un'intestazione a livello di file con alcune informazioni generali, seguita da blocchi di dati per ogni pagina contenente i dati della pagina. Se poi prendi due file, ognuno contenente una pagina e li unisci come file binari, non creerai un file di due pagine, ma invece un file corrotto che inizia con una pagina, quindi ha un mucchio di spazzatura (il file header non ha senso quando il programma tenta di leggere la seconda pagina).

La stessa cosa accade per i tuoi MP3. Quando li combini in questo modo, i tag ID3 all'inizio e / o alla fine del secondo file vengono mantenuti e quando il lettore tenta di leggere il fotogramma successivo, si aspetta dati audio, ma trova l'intestazione del secondo file che non corrisponde al formato previsto per i dati audio, quindi non sa cosa fare. Alcuni giocatori riprodurranno l'intestazione come dati audio (che probabilmente suonerà come statico / rumore / pop / ecc.), Alcuni taglieranno il suono fino al prossimo fotogramma corretto, altri potrebbero interrompere la riproduzione del brano e alcuni potrebbero persino andare in crash .

Il copycomando non è a conoscenza di tipi di file diversi dal testo normale (e anche solo dal testo ASCII), quindi solo il testo normale può essere combinato correttamente con esso. I file binari devono essere combinati utilizzando un editor in grado di analizzare e interpretare correttamente i contenuti.


Bello, VLC riproduce entrambi i file mp3 e cerca anche correttamente, l'unico problema è che non vuoi solo vedere le variazioni temporali ...
Chibueze Opata

Bene, come ho detto, alcuni programmi sono tolleranti ai file corrotti. L'algoritmo di analisi di VLC può saltare i frame "corrotti", ma poiché non sono frame effettivi, non ha modo di conoscere la lunghezza corretta, quindi salta. È come se carichi il file PDF di due pagine inventato sopra; il lettore non saprebbe quante pagine ci sono effettivamente. La tua scommessa migliore con gli MP3 è di eliminare i tag in modo che ci sia solo un mucchio di frame audio prima di fare una copia binaria.
Synetech,

1

Nel tuo esempio, con gli MP3, probabilmente darà comportamenti strani a causa della codifica degli MP3. Ad esempio, i tag ID3v1 sono gli ultimi 128 byte di un MP3 (ovvero artista, album, ecc.). Questa informazione non è "giocabile". Quando VLC o un altro lettore multimediale apre l'MP3, riprodurrà (probabilmente) il primo MP3, si comporterà in modo divertente per le informazioni e quindi riprodurrà il resto del file. Non ho Windows caricato in questo momento, quindi non posso testarlo di sicuro.

Suppongo che questo sia lo stesso di immagini e filmati; a seconda della modalità di codifica dei file dipende dalla modalità di "combinazione" dei file. Immagino che questa funzionalità sia venuta dai tempi di DOS quando tutto era in chiaro


1

Molto tempo fa, nei bei vecchi tempi di Win ME, utilizzo semplicemente per concatenare videoclip. Non ha funzionato tutto il tempo, ma ha funzionato qualche volta.

Questo è un esempio del comando che ho usato:

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

Se i film non erano troppo grandi e dello stesso tipo, frame rate ecc., Di solito si fondevano perfettamente. Non ho provato niente del genere ultimamente.


-1

Per quanto riguarda l'MP3, all'incirca, ciò che è dopo l'intestazione può essere letto come un dato. C'è questo gioco, Sonic 3 in Sega Genesis e un altro gioco chiamato Sonic & Knuckles. La cartuccia originale di Sonic & Knuckles aveva uno slot destinato ad inserire altri giochi, ma quando aggiunto Sonic 2 e specialmente 3, probabilmente il checksum avrebbe innescato un altro set di puntatori, il gioco si sarebbe comportato diversamente. All'inizio dell'utilizzo delle ROM, ogni volta che volevamo far funzionare due cartucce come nell'hardware, usavamo copy /b sonick.bin+sonic3.bin sonic3k.bin. In questo modo, la loro unione si tradurrebbe in un'unica grande ROM in cui sonick avrebbe impostato le istruzioni (puntatori) per utilizzare le risorse di sonic3.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.