O que exatamente acontece quando você usa o comando 'copy / b'?

8

Hoje, acabei de descobrir que era possível mesclar alguns arquivos usando o comando copy /b . Em particular, notei que, quando mesclava dois arquivos mp3, o player VLC exibia comportamentos engraçados com o tempo:

Aqui,énormal,masaprimeiramúsicaestavachegandoaofim...entãoaparteengraçadaseguiu...

Aqui, a busca de tempo estava literalmente em execução enquanto estava tocando.

Ao combinar imagens ou PDF com essa técnica, descobri que haverá um aumento correto no tamanho do arquivo, mas apenas a primeira foto será exibida.

Então, minha pergunta é: o que exatamente o comando copy /b faz? É realmente destinado a ser usado para mesclar arquivos ou isso é um hack?

    
por Chibueze Opata 25.07.2012 / 05:25

4 respostas

10

O sinalizador /b do comando copy trata os arquivos como binários (ou seja, um fluxo bruto de bytes sem sentido) e os copia por byte em vez do comportamento padrão (ou /a ) que trata como linhas de texto (com caracteres de fim-de-linha, fim de arquivo, etc.)

Você pode mesclar arquivos de texto com o comportamento de texto padrão ou o comutador binário, mas praticamente nenhum arquivo binário qualquer não funcionará. Você não pode simplesmente copiar os bytes de dois arquivos binários e esperar que eles funcionem porque os arquivos binários geralmente têm cabeçalhos , metadados , estruturas de dados , etc., que definem o formato do arquivo. Se você fizer uma cópia binária, você estará simplesmente copiando todos os bytes como está, o que acaba colocando essas estruturas em lugares que elas não deveriam estar, então quando você as abre, a função de análise terá problemas e verá o que é essencialmente corrompido. . Alguns programas ignoram as partes que não fazem sentido e simplesmente mostram o que podem (o que permite que a estereografia funcione), mas alguns lançam um erro e reclamam que o arquivo está corrompido. A capacidade de detectar corrupção depende do tipo de arquivo.

Como exemplo, vamos criar um formato PDF simplificado:

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

Como você pode ver, cada arquivo conterá um cabeçalho de nível de arquivo com algumas informações gerais, seguido de blocos de dados para cada página contendo os dados da página. Se você pegar dois arquivos, cada um contendo uma página e mesclá-los como arquivos binários, você não estará criando um arquivo de duas páginas, mas sim um arquivo corrompido que começa com uma página, então tem um monte de lixo (o arquivo cabeçalho não faz sentido quando o programa tenta ler a página dois).

O mesmo acontece com os seus MP3s. Quando você as combinou assim, as tags ID3 no início e / ou no final do segundo arquivo são mantidas, e quando o jogador tenta ler o próximo quadro, ele está esperando dados de áudio, mas está encontrando o cabeçalho do segundo arquivo que não corresponde ao formato esperado para dados de áudio, por isso não sabe o que fazer. Alguns jogadores jogam o cabeçalho como dados de áudio (que provavelmente serão reproduzidos como estáticos / barulhentos / pops / etc.), Alguns cortam o som até o próximo quadro correto, alguns podem parar de tocar a música e alguns podem até travar. .

O comando copy não sabe nada sobre tipos de arquivo que não texto simples (e, mesmo assim, apenas texto ASCII), portanto, apenas texto simples pode ser combinado corretamente com ele. Os arquivos binários devem ser combinados usando um editor que saiba como analisar e interpretar o conteúdo corretamente.

    
por 25.07.2012 / 05:50
1

No seu exemplo, com MP3s, ele provavelmente dará comportamentos estranhos devido ao modo como os MP3s são codificados. Por exemplo, as tags ID3v1 são os últimos 128 bytes de um MP3 (por exemplo, artista, álbum, etc). Esta informação não é "jogável". Quando o VLC ou outro reprodutor de mídia abrir o MP3, ele provavelmente tocará o primeiro MP3, agirá de modo engraçado para a informação e possivelmente passará pelo resto do arquivo. Eu não tenho o Windows carregado agora, então não posso testar com certeza.

Eu diria que isso é o mesmo que imagens e filmes; dependendo de como os arquivos são codificados depende de como os arquivos serão "combinados". Eu imagino que essa funcionalidade veio dos dias do DOS quando tudo estava em texto simples

    
por 25.07.2012 / 05:34
1

Há muito tempo, nos bons e velhos tempos do Win ME, eu costumava concatenar videoclipes. Não funcionou o tempo todo, mas funcionou algumas vezes.

Este é um exemplo do comando que usei:

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

Se os filmes não fossem muito grandes e do mesmo tipo, frame rate etc, eles geralmente se fundiam perfeitamente. Não tentei nada assim ultimamente.

    
por 25.01.2016 / 20:10
-1

Em relação ao MP3, mais ou menos, o que vem depois do cabeçalho pode ser lido como dados. Há este jogo, Sonic 3 no Sega Genesis e outro jogo chamado Sonic & Knuckles O Sonic & Knuckles cartucho original tinha um slot destinado a inserir outros jogos, mas quando adicionado Sonic 2 e especialmente 3, provavelmente a soma de verificação iria acionar outro conjunto de ponteiros, o jogo iria se comportar de forma diferente. No estágio inicial de usar ROMs, sempre que queríamos colocar dois cartuchos para funcionar como estava no hardware, usamos copy /b sonick.bin+sonic3.bin sonic3k.bin . Dessa forma, a mesclagem deles resultaria em uma única ROM grande em que o sonic teria o conjunto de instruções (ponteiros) para fazer com que usasse recursos sonic3.

    
por 25.01.2017 / 13:49