Apa yang sebenarnya terjadi ketika Anda menggunakan perintah 'copy / b'?

13

Hari ini, saya baru tahu saya bisa menggabungkan file tertentu menggunakan copy /bperintah. Secara khusus, saya perhatikan bahwa ketika saya menggabungkan dua file mp3, VLC player menunjukkan perilaku lucu dengan pengaturan waktu:

             Ambil 1

Di sini, itu cukup normal tetapi musik pertama sudah berakhir ... kemudian bagian yang lucu mengikuti ....

            Ambil 2              Ambil 3

Di sini, waktu mencari benar-benar berjalan seperti yang sedang diputar.

Pada menggabungkan gambar atau PDF dengan teknik ini, saya menemukan bahwa akan ada peningkatan yang benar dalam ukuran file tetapi hanya gambar pertama yang akan ditampilkan.

Jadi pertanyaan saya adalah: Apa sebenarnya yang dilakukan copy /bperintah? Apakah ini benar-benar dimaksudkan untuk digunakan untuk menggabungkan file atau ini adalah hack?

Chibueze Opata
sumber

Jawaban:

17

The /bbendera copymemperlakukan perintah file sebagai biner (yaitu, aliran baku byte berarti), dan salinan mereka byte untuk byte bukan default (atau /a) perilaku yang memperlakukan mereka sebagai baris teks (dengan end-of-line karakter, akhir file, dll.)

Anda dapat menggabungkan file teks dengan perilaku teks default atau saklar biner, tetapi hampir semua file biner tidak akan berfungsi. Anda tidak bisa hanya menyalin byte dari dua file biner dan mengharapkannya bekerja karena file biner biasanya memiliki header , metadata , struktur data, dll. yang menentukan format file. Jika Anda melakukan salinan biner, Anda hanya akan menyalin semua byte seperti apa yang akhirnya menempatkan struktur ini di tempat-tempat yang seharusnya tidak, jadi ketika Anda membukanya, fungsi parsing akan mengalami kesulitan dan melihat apa yang pada dasarnya data korup . Beberapa program akan mengabaikan bagian-bagian yang tidak masuk akal dan hanya menunjukkan apa yang mereka bisa (yang memungkinkan stereografi berfungsi), tetapi beberapa akan membuat kesalahan dan mengeluh bahwa file tersebut rusak. Kemampuan untuk mendeteksi korupsi tergantung pada tipe file.

Sebagai contoh, mari kita ciptakan format PDF yang disederhanakan:

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

Seperti yang Anda lihat, setiap file akan berisi tajuk tingkat file dengan beberapa informasi umum, diikuti oleh blok data untuk setiap halaman yang berisi data halaman. Jika Anda kemudian mengambil dua file, masing-masing berisi satu halaman dan menggabungkannya sebagai file biner, Anda tidak akan membuat satu file dua halaman, tetapi sebaliknya satu file korup yang dimulai dengan satu halaman, kemudian memiliki banyak sampah (file tersebut header tidak masuk akal ketika program mencoba membaca halaman dua).

Hal yang sama terjadi pada MP3 Anda. Ketika Anda menggabungkan mereka seperti itu, tag ID3 di awal dan / atau akhir file kedua dipertahankan, dan ketika pemain mencoba membaca frame berikutnya, itu mengharapkan data audio, tetapi sedang menemukan header dari file tersebut. file kedua yang tidak sesuai dengan format yang diharapkan untuk data audio, jadi tidak tahu apa yang harus dilakukan. Beberapa pemain akan memainkan header sebagai data audio (yang kemungkinan akan diputar sebagai statis / noise / muncul / dll.), Beberapa akan memotong suara untuk sampai frame yang benar berikutnya, beberapa mungkin berhenti memainkan lagu sama sekali, dan beberapa bahkan mungkin crash .

The copyPerintah tahu apa-apa tentang file-jenis lain dari teks biasa (dan bahkan kemudian, hanya teks ASCII), sehingga hanya plain-text dapat dikombinasikan dengan benar dengan itu. File biner harus digabungkan menggunakan editor yang tahu cara mem-parsing dan menginterpretasikan konten dengan benar.

Synetech
sumber
Bagus, VLC memutar kedua file mp3 dan bahkan mencari dengan benar, satu-satunya masalah adalah Anda tidak hanya ingin melihat variasi waktu ...
Chibueze Opata
Seperti yang saya katakan, beberapa program toleran terhadap file korup. Algoritma parsing VLC dapat melewati frame "korup", tetapi karena mereka bukan frame sebenarnya, ia tidak memiliki cara untuk mengetahui panjang yang benar, sehingga ia melompat-lompat. Ini seperti jika Anda memuat file PDF dua halaman yang ditemukan di atas; pembaca tidak akan tahu berapa banyak halaman sebenarnya. Taruhan terbaik Anda dengan MP3 adalah menghapus tag sehingga hanya ada sekelompok bingkai audio sebelum melakukan salinan biner.
Synetech
1

Dalam contoh Anda, dengan MP3, itu mungkin akan memberikan perilaku aneh karena bagaimana MP3 dikodekan. Misalnya, tag ID3v1 adalah 128 byte terakhir dari MP3 (yaitu artis, album, dll). Informasi ini tidak "dapat dimainkan". Ketika VLC atau pemutar media lain membuka MP3, itu akan (mungkin) memutar melalui MP3 pertama, bertindak lucu untuk informasi tersebut, dan kemudian mungkin memutar sisa file. Saya tidak punya Windows yang dimuat sekarang, jadi saya tidak bisa menguji dengan pasti.

Saya berasumsi ini sama dengan gambar dan film; tergantung bagaimana file dikodekan tergantung bagaimana file akan "digabungkan". Saya membayangkan fungsi ini berasal dari zaman DOS ketika semuanya dalam teks biasa

Luke Kanada
sumber
1

Dulu di masa lalu Win ME hari-hari baik saya gunakan untuk hanya menyatukan klip video. Itu tidak berfungsi sepanjang waktu tetapi itu berhasil beberapa waktu.

Ini adalah contoh dari perintah yang saya gunakan:

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

Jika film di mana tidak terlalu besar dan semua jenis yang sama, frame rate dll, mereka biasanya bergabung dengan sempurna. Belum mencoba yang seperti ini belakangan ini.

Terry Hollett
sumber
-1

Mengenai MP3, kira-kira, apa yang setelah header semua bisa dibaca sebagai data. Ada game ini, Sonic 3 di Sega Genesis dan game lain yang disebut Sonic & Knuckles. Kartrid asli Sonic & Knuckles memiliki slot yang dimaksudkan untuk memasukkan gim lain, tetapi ketika menambahkan Sonic 2 dan khususnya 3, mungkin checksum akan memicu set pointer lain, gim akan berperilaku berbeda. Pada tahap awal menggunakan ROM, setiap kali kami ingin menempatkan dua kartrid berfungsi seperti pada perangkat keras, kami menggunakannya copy /b sonick.bin+sonic3.bin sonic3k.bin. Dengan cara ini, penggabungan mereka akan menghasilkan satu ROM tunggal besar di mana sonick akan memiliki set instruksi (pointer) untuk membuatnya menggunakan sumber daya sonic3.

Deise Candido
sumber