How to pipe Windows "dir" in ANSI codepage
Solution 1
I think there is easy way, "from the box"
chcp 1252
dir > file.txt
Solution 2
You are being led up the garden path by the letter "A". The /A
option isn't distinguishing "ANSI" from "OEM" code pages. It's distinguishing 8-bit single-byte/multiple-byte character sets from 16-bit Unicode (the /U
option). 8-bit SBCS/MBCS output from a Win32 program, such as CMD
, to a console is handled in the "OEM" code page.
Related videos on Youtube
Rich Pasco
Updated on September 18, 2022Comments
-
Rich Pasco almost 2 years
This applies to both Windows XP and Windows 7.
Some of my files have names with European characters, for example the German a-umlaut, also known as a-diaeresis.
These are displayed correctly in Windows Explorer, and also in a command shell (cmd.exe) window in response to the "dir" command.
However, if that "dir" command is directed to a file, e.g.
dir > file.txt
then the European characters in that file are represented in a DOS codepage; for example the a-umlaut is represented as decimal 132 (hex 0x84). This is not what I want. I want the file to be in the ANSI codepage, where for example a-umlaut is decimal 228 (hex 0xE4).
Issuing the command "cmd /?" results in help information including the line
/A Causes the output of internal commands to a pipe or file to be ANSI
This sounds like exactly what I want. However, either the sequence of commands
cmd /A dir > file.txt exit
or the equivalent single command line
cmd /A /C dir > file.txt
produces exactly the same file.txt as before; with its Europoean characters still in the DOS code page.
So my question is, how can I get "dir" to write a file in the ANSI codepage?
- Rich
-
Breakthrough almost 13 yearsHave you tried with the Unicode (
/U
) flag instead of ANSI? -
user1686 almost 13 yearsSwitching from OEM to ANSI is like upgrading from DOS to Windows 3.1... it will cause even more suffering in the end. Use Unicode if possible.
-
Rich Pasco almost 13 yearsNice plug for Unicode, but for many reasons this has to interface with existing scripts that use single-byte characters.
-
Rich Pasco almost 13 yearsOK, JdeBP, I understand what you're saying: the help information sure is misleading. But then how do I get the output of the "DIR" command to be in ANSI code page (well, ISO 8859-1, the standard for Windows) rather than the OEM DOS codepage (850 in my case)? I suppose I could write a simple EXE filter with a lookup table, and then pipe my DIR through it, or maybe I could write a whole new replacement for DIR which does what I want in the first place. But surely there's an easier way!
-
Rich Pasco almost 13 yearsI found one way to do it: download my utility cp850win and then issue the command
dir | cp850win > file.txt