TYPE 命令在 0x1A 上停止,除非通过管道传输到 MORE?

TYPE command stops on 0x1A, except when piped to MORE?

如果我有一个包含以下内容的二进制文件:

48 65 6C 6C 6F 1A 48 65 6C 6C 6F

然后当我 运行 对其执行 TYPE 命令时,它会在 1A 字符处停止读取:

C:\Temp>type file.bin
Hello

但是,当我再次 运行 TYPE 但这次将输出通过管道传递给 MORE 时,它会产生以下输出:

C:\Temp>type file.bin|more
Hello→Hello

C:\Temp>

这比前面的命令更能代表文件的实际内容。

管道输出到 MORE 的具体作用是什么使得它打印出文件的整个 ASCII 表示而不管是否存在 1A 字符?

type 命令在内部检查输出将发送到哪里。

如果输出流是控制台,则检查输入缓冲区是否存在作为 EOF 处理的 Ctrl-Z0x1A 字符)。

如果输出流不是控制台,则处理所有字符。这不仅发生在管道上,也发生在重定向上。

type file.bin | more
type file.bin > con
type file.bin > file.bin.out

重定向和管道 type 命令都将处理所有字符。

0x1A 字符的这种行为也存在于 copy 命令中,但在这种情况下它也是 documented.