如何在 ANSI 代码页中管道传输 Windows“dir”

如何在 ANSI 代码页中管道传输 Windows“dir”

这适用于 Windows XP 和 Windows 7。

我的一些文件的名称带有欧洲字符,例如德语 a-umlaut,也称为 a-diaeresis。

这些在 Windows 资源管理器中正确显示,并且在响应“dir”命令的命令 shell (cmd.exe) 窗口中也能正确显示。

但是,如果该“dir”命令指向一个文件,例如

dir > file.txt

那么该文件中的欧洲字符将以 DOS 代码页表示;例如,a-umlaut 表示为十进制 132(十六进制 0x84)。这不是我想要的。我希望文件采用 ANSI 代码页,例如,a-umlaut 为十进制 228(十六进制 0xE4)。

发出命令“cmd /?”将产生帮助信息,其中包括以下行

/A      Causes the output of internal commands to a pipe or file to be ANSI

这听起来正是我想要的。但是,无论是命令序列

cmd /A
dir > file.txt
exit

或等效的单个命令行

cmd /A /C dir > file.txt

生成与以前完全相同的 file.txt;其欧洲字符仍然在 DOS 代码页中。

所以我的问题是,如何让“dir”在 ANSI 代码页中写入文件?

  • 富有的

答案1

我认为有一种简单的方法,“从盒子里”

chcp 1252
dir > file.txt

答案2

字母“A”将您引入了歧途。该/A选项并没有区分“ANSI”和“OEM”代码页。而是区分了 8 位单字节/多字节字符集和 16 位 Unicode(该/U选项)。 从 Win32 程序(例如)到控制台的 8 位 SBCS/MBCS 输出CMD在“OEM”代码页中处理。

相关内容