重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

COPY A + B + C D
としますが、Dno最後に1バイト「Hex1A」が余分についてしまいます。
Windows2019でもWindows10でも、同様です。
何が誤っているのでしょうか?

A 回答 (3件)

懐かしい話題です。



その昔、デジタルリサーチという会社が作ったパソコン用の
OS CP/M は、
ファイルを 128 byte 単位でしか扱えませんでした。
バイナリファイルはそれでもなんとかなったのですが、
テキストファイルはそれではまずいので、
テキストの終端記号 0x1a をテキストファイルの
内容の終端に付けるようにしました。

時代は流れ、パソコン用のOSは MS=DOS になりましたが
MS-DOSになってファイルの長さは1byte単位で管理できるように
なり、0x1aは不要になったのですが、この習慣は
未だにいくつかのアプリ(VBとか)で生き残っています。
COPYコマンドもその一つ。

すいません、じじいのたわ言です。

COPY コマンドは /B (バイナリファイルオプション) を付ければ
0x1aが付加しなくなります。
    • good
    • 0

昔のMS-DOSでは、テキストファイルの最後には Hex1A( EOF )を付ける、という習慣がありました。


それ以降はファイルが続いていても無視する、という動作をするソフトもそれなりにありました。

A,B,Cが EOFで終わっている場合、単純に結合したのでは、AのEOFを読んだ時点でファイルが終了と判断されてしまうため、全てを読みこめません。
A,BのEOFは削除し、逆にCの後には作法通りにEOFが必要になります。
COPYコマンドはこの頃に作られたもので、未だにこの仕様を引き摺っています。

対処法は、/bオプションでバイナリファイルとして扱ってもらうことです。
https://learn.microsoft.com/ja-jp/windows-server …

> source に複数のファイルが指定された場合は、copy コマンドが、destination に指定されたファイル名を使用して、すべてのファイルを 1 つのファイルに結合します。
> copy コマンドは、/b オプションが使用されていない限り、結合されたファイルが ASCII ファイルであると仮定します。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2025/02/18 01:04

テキストモードで動作するため終端に0x1Aがつきます。


バイナリモードでCOPYコマンドを実行すると0x1Aがつかないのではないかと思います。
「/B」オプションを付加してお試しください
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2025/02/18 01:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A