为什么使用type命令添加文本文件内容会导致在输出文件中出现乱码?

我有多个.txt文件被创build为batch file的输出。 当我用记事本打开它们时,它们都以英文显示正确。 但是,如果我运行:

type file1.txt >> file2.txt 

来自file1的附加文本在file2中显示为不可读的字符。 改变字体没有帮助。

这是一种需要改变的编码吗?

我如何得到这个附加的原始文件的外观和格式?

这个问题类似于cmd是以某种方式写中文文本为输出 。

文本文件是Unicode文本文件,最有可能使用UTF-16小端编码。

要使用命令type将Unicode文本文件file1.txt正确地附加到Unicode文本文件file2.txt,需要使用开关/U启动命令行解释器cmd.exe以将内部命令的输出重定向到文件中或者通过管道传输到另一个文件Unicode格式的命令。

由于Aacini建议已经正确,使用的命令行是

 cmd /U /C type file1.txt >> file2.txt 

连接2个或多个文本文件的另一种方法是使用复制命令。

 copy "Text File 1.txt" + "Text File 2.txt" + "Text File 3.txt" "Output File.txt" 

在这种情况下,不需要使用switch /U调用cmd.exe ,即使文本文件使用UTF-16而不是ANSI进行编码。

如果所有3个文本文件都是带有BOM的Unicode文本文件,则命令copy自动删除文本文件2.txt文本文件3.txt的字节顺序标记(BOM)。 在这种情况下, 输出File.txt只包含一次BOM。

 copy *.txt "Output File.txt" 

将目录中的所有文本文件连接到名为Output File.txt的文件。

注1:
NTFS文件系统驱动程序根据文件名返回目录中* .txt文件的列表,总是按字母顺序(不是字母数字!)。 因此,文件名称在NTFS分区上确定文本文件串联的顺序。 但是,FAT32文件系统驱动程序根据文件分配表中的列表返回目录中的* .txt文件列表,如果将上述命令与*.txt一起使用,导致FAT32分区上的文本文件连接顺序不可预知。

笔记2:
所有的文本文件都使用相同的编码,即所有的文本文件都是UTF-16编码,或者所有的文本文件都是ANSI编码,这对使用命令copy很重要。

注3:
命令copy也可以用来连接二进制文件。 在命令提示符窗口中输入copy /?help copy一个简短的帮助解释可选开关/B (二进制文件)和/A (ASCII / ANSI文本文件)。