Що саме відбувається, коли ви використовуєте команду 'copy / b'?


11

Сьогодні я щойно виявив, що можу об'єднати певні файли за допомогою copy /bкоманди. Зокрема, я помітив, що коли я об'єднав два mp3-файли, програвач VLC демонстрував кумедні поведінки з часом:

             Візьміть 1

Тут це цілком нормально, але перша музика закінчувалась ... потім пішла весела частина ....

            Візьміть 2              Візьміть 3

Тут пошук часу буквально пробігав, як це грало.

Поєднуючи зображення або PDF з цією технікою, я виявив, що буде правильне збільшення розміру файлу, але буде показано лише перше зображення.

Отже, моє запитання: Що саме робить copy /bкоманда? Це дійсно призначено використовувати для об'єднання файлів чи це хакер?

Відповіді:


14

/bПрапор з copyкоманди обробляє файли у двійковому форматі (тобто сирої потік безглуздих байт), і копіює їх байт в байт , а не за замовчуванням (або /a) поведінки , яке розглядає їх як рядки тексту (з кінця-рядки символи, кінцеві файли тощо)

Ви можете об'єднати текстові файли з текстовою поведінкою за замовчуванням або з бінарним перемикачем, але майже будь-який двійковий файл не працюватиме. Ви не можете просто скопіювати байти з двох бінарних файлів і очікувати їх роботи, оскільки двійкові файли зазвичай мають заголовки , метадані , структури данихтощо, які визначають формат файлу. Якщо ви робите двійкову копію, ви просто будете копіювати всі байти як є, що в кінцевому підсумку поміщає ці структури в місця, де їх не повинно бути, тож коли ви відкриєте їх, функція розбору буде мати проблеми і побачити, що по суті є пошкодженими даними . Деяка програма ігнорує частини, які не мають сенсу, і просто покаже, що вони можуть (що дозволяє працювати стереографії), але деякі видадуть помилку та скаржаться на те, що файл пошкоджений. Можливість виявлення корупції залежить від типу файлу.

Як приклад, наведемо спрощений формат PDF:

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

Як бачимо, кожен файл буде містити заголовок рівня файлу з деякою загальною інформацією з подальшим блоком даних для кожної сторінки, що містить дані про сторінку. Якщо ви візьмете два файли, кожен з яких містить одну сторінку, і об'єднаєте їх як бінарні файли, ви не створите один двосторінковий файл, а натомість один пошкоджений файл, який починається з однієї сторінки, а потім має купу небажаної файлу (файл заголовок не має сенсу, коли програма намагається прочитати другу сторінку).

Те ж саме відбувається і з вашими MP3. Коли ви об'єднали їх так, теги ID3 на початку та / або в кінці другого файлу зберігаються, і коли плеєр намагається прочитати наступний кадр, він очікує звукових даних, але знаходить заголовки другий файл, який не відповідає очікуваному формату аудіоданих, тому не знає, що робити. Деякі гравці відтворюватимуть заголовок у вигляді аудіоданих (які, ймовірно, гратимуть як статичні / шум / попси / тощо), деякі вирізатимуть звук до наступного правильного кадру, деякі можуть взагалі перестати відтворювати пісню, а деякі можуть навіть вийти з ладу .

copyКоманда нічого не знає про інших , ніж звичайний текст (і навіть тоді, тільки ASCII текст) типи файлів, тому тільки звичайний текст може бути скомбіновані правильно з ним. Бінарні файли потрібно поєднувати за допомогою редактора, який вміє правильно розбирати та інтерпретувати вміст.


Приємно, VLC відтворює обидва mp3-файли і навіть шукає правильно, хоча проблема полягає лише в тому, що ви не просто хочете бачити зміни часу ...
Chibueze Opata

Як я вже сказав, деякі програми мають толерантність до корумпованих файлів. Алгоритм розбору VLC може пропустити "пошкоджені" кадри, але оскільки вони не є фактичними кадрами, він не може знати правильну довжину, тому він стрибає навколо. Це так, як якщо ви завантажите винайдений вище двосторінковий PDF-файл; читач не знав би, скільки насправді таких сторінок. Ваша найкраща ставка з MP3-файлами - зняти теги, щоб перед двійковою копією залишилася лише купа аудіокадрів.
Synetech

1

У вашому прикладі з MP3-файлами це, ймовірно, спричинить дивні поведінки через те, як MP3 кодуються. Наприклад, теги ID3v1 - це останні 128 байт MP3 (тобто виконавця, альбому тощо). Ця інформація не підлягає відтворенню. Коли VLC або інший медіаплеєр відкриє MP3, він (ймовірно) відтворюватиме через перший MP3, поводитиметься смішно для інформації, а потім, можливо, відтворюватиметься через решту файлу. Зараз у мене немає завантаження Windows, тому я не можу перевірити напевно.

Я б припустив, що це те саме, що образи та фільми; залежно від того, як закодовані файли, залежить те, як файли будуть "поєднуватися". Я думаю, що ця функціональність виникла з часів DOS, коли все було в простому тексті


1

Давно в старі добрі дні Win ME я використовував просто об'єднання відеокліпів. Це не працювало весь час, але працювало деякий час.

Це приклад команди, яку я використав:

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

Якщо фільми там, де не надто великі і все однотипні, частота кадрів тощо, вони зазвичай зливаються бездоганно. Останнім часом не пробував нічого подібного.


-1

Що стосується MP3, приблизно, те, що після заголовка, все можна читати як дані. Є ця гра, Sonic 3 у Sega Genesis та ще одна гра під назвою Sonic & Knuckles. Оригінальний картридж Sonic & Knuckles мав слот, призначений для вставки інших ігор, але коли додано Sonic 2 та спеціально 3, можливо, контрольна сума запустить інший набір покажчиків, гра поводитиметься інакше. На ранній стадії використання ПЗУ, коли ми хотіли поставити два картриджа для роботи, як це було в апаратному забезпеченні, ми використовували copy /b sonick.bin+sonic3.bin sonic3k.bin. Таким чином, їх об'єднання призведе до одного великого єдиного ПЗУ, де Sonick матиме набір інструкцій (покажчики), щоб він використовував ресурси sonic3.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.