'copy / b'명령을 사용하면 정확히 어떻게됩니까?


13

오늘 방금 copy /b명령을 사용하여 특정 파일을 병합 할 수 있음을 발견했습니다 . 특히 두 개의 mp3 파일을 병합하면 VLC 플레이어가 타이밍과 함께 재미있는 동작을 나타냅니다.

             받아 1

여기는 꽤 정상적이지만 첫 번째 음악은 끝나고 ... 재미있는 부분은 ...

            2를 가지고 가십시오              3을 가지고 가십시오

여기서, 탐색 시간은 말 그대로 실행 중이었습니다.

이 기술과 함께 사진이나 PDF를 결합 할 때 파일 크기가 올바르게 증가하지만 첫 번째 사진 만 표시됨을 발견했습니다.

내 질문은 : copy /b명령이 정확히 무엇을 합니까? 실제로 파일을 병합하는 데 사용됩니까, 아니면 해킹입니까?

답변:


17

명령 의 /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

보시다시피, 각 파일에는 일반적인 정보가 포함 된 파일 수준 헤더와 페이지 데이터가 포함 된 각 페이지의 데이터 블록이 포함됩니다. 그런 다음 각각 하나의 페이지를 포함하는 두 개의 파일을 가져 와서 이진 파일로 병합하면 하나의 두 페이지 파일을 만들지 않고 한 페이지로 시작하는 하나의 손상된 파일을 만든 다음 여러 개의 정크 파일 (파일)이 생깁니다 프로그램이 2 페이지를 읽으려고하면 헤더가 의미가 없습니다.)

MP3에서도 마찬가지입니다. 이렇게 결합 하면 두 번째 파일의 시작 및 / 또는 끝에 ID3 태그 가 유지되고 플레이어가 다음 프레임을 읽으려고 할 때 오디오 데이터가 필요하지만 헤더를 찾는 중입니다. 오디오 데이터의 예상 형식과 일치하지 않는 두 번째 파일이므로 수행 할 작업을 모릅니다. 일부 플레이어는 헤더를 오디오 데이터 (정적 / 노이즈 / 팝 등으로 재생 될 수 있음)로 재생하고 일부는 다음 올바른 프레임까지 사운드를 차단하고 일부는 노래 재생을 완전히 중지하고 일부는 충돌 할 수도 있습니다. .

copy명령은 일반 텍스트 이외의 파일 형식 (아직 ASCII 텍스트 만 해당)에 대해서는 아무것도 모르므로 일반 텍스트 만 올바르게 결합 할 수 있습니다. 이진 파일은 내용을 올바르게 구문 분석하고 해석하는 방법을 알고있는 편집기를 사용하여 결합해야합니다.


VLC는 mp3 파일을 모두 재생하고 올바르게 검색하지만 문제는 시간 변화
만보고 싶지 않다는 것입니다

내가 말했듯이 일부 프로그램은 손상된 파일을 허용합니다. VLC의 파싱 알고리즘은 "손상된"프레임을 건너 뛸 수 있지만 실제 프레임이 아니기 때문에 올바른 길이를 알 수 없으므로 건너 뛸 수 있습니다. 위의 발명 된 2 페이지 PDF 파일을로드하는 것과 같습니다. 독자는 실제로 얼마나 많은 페이지가 있는지 모를 것입니다. MP3를 사용하는 가장 좋은 방법은 이진 복사를 수행하기 전에 오디오 프레임이 많지 않도록 태그를 제거하는 것입니다.
Synetech

1

귀하의 예에서 MP3의 경우 MP3가 인코딩되는 방식으로 인해 이상한 동작이 발생합니다. 예를 들어 ID3v1 태그는 MP3의 마지막 128 바이트 (예 : 아티스트, 앨범 등)입니다. 이 정보는 "재생 가능"하지 않습니다. VLC 또는 다른 미디어 플레이어가 MP3를 열면 첫 번째 MP3를 통해 재생되고 정보에 대해 재미있게 행동 한 다음 나머지 파일을 통해 재생됩니다. 지금 Windows를로드하지 않았으므로 테스트 할 수 없습니다.

나는 이것이 이미지 나 영화와 같다고 가정 할 것이다. 파일이 인코딩되는 방식에 따라 파일이 "결합"되는 방식에 따라 다릅니다. 이 기능은 모든 것이 평범한 텍스트 일 ​​때 DOS 시절부터 온 것 같습니다.


1

오래 전에 좋은 Win ME 시절에는 비디오 클립을 연결하는 데 사용했습니다. 항상 작동하지는 않았지만 얼마 동안 작동했습니다.

이것은 내가 사용한 명령의 예입니다.

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

너무 크지 않고 모두 같은 유형, 프레임 속도 등의 영화인 경우 일반적으로 완벽하게 병합됩니다. 최근에 이와 같은 것을 시도하지 않았습니다.


-1

MP3에 관해서는 대략 헤더 뒤의 내용을 모두 데이터로 읽을 수 있습니다. 이 게임은 Sega Genesis의 Sonic 3과 Sonic & Knuckles라는 또 다른 게임입니다. Sonic & Knuckles 정품 카트리지에는 다른 게임을 삽입 할 수있는 슬롯이 있었지만 Sonic 2와 특별히 3을 추가했을 때 체크섬이 다른 포인터 세트를 트리거 할 경우 게임이 다르게 작동합니다. ROM을 사용하는 초기 단계에서는 하드웨어에있는 것처럼 두 개의 카트리지를 작동시킬 때마다을 사용했습니다 copy /b sonick.bin+sonic3.bin sonic3k.bin. 이런 식으로 병합하면 sonick이 sonic3 리소스를 사용하도록 명령 세트 (포인터)를 갖는 하나의 큰 단일 ROM이 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.