I have a problem with chcp 65001
command in Windows shell.
I need to generate a list of files in a folder. So I ran cmd.exe, typed
cd folder
Use cmd /U
. See http://ss64.com/nt/cmd.html:
Most common text files are ANSI, use these switches when you need to convert the character set. These options will affect piping or redirecting to a file:
/A
Output ANSI characters/U
Output UNICODE characters (UCS-2 Little Endian)
Here's my attempt (launch it under cmd /A
, of course):
@ECHO OFF >NUL
SETLOCAL EnableExtensions
:: create a UNICODE file with Byte Order Mark using `wmic`
chcp 852 >NUL
>list_of_files.txt wmic os get localdatetime
:: store a line with BOM to a variable
:: although FINDSTR does not support UTF-16 files
:: it will read first three bytes at least
for /F "delims=" %%G in ('
findstr "^" list_of_files.txt
') do set "UTF8BOM=%%G"
:: write BOM only* to a file (* echo writes hexadecimal value FFFE0D0A)
:: the `list_of_files.txt echo(%UTF8BOM:~0,2%
chcp 65001 >NUL
:: add CRLF in Unicode (hexadecimal 0D000A00)
>>list_of_files.txt cmd /U /C echo(
:: add result of `dir /B /O:N` in Unicode
>>list_of_files.txt cmd /U /C dir /B /O:N
:: check the result: still invalid first line, see output
type list_of_files.txt
chcp 852 >NUL
Output. Still invalid first line (that hexadecimal 0D0A
), sorry; use another method to get pure Utf-8 byte order mark:
==>cmd /A /C D:\bat\SO\UTF8BOM32182619.bat
cpANSI_OoCcSsUu.txt
cpANSI_ÖöÇ窺Üü.txt
escrzyaie.txt
ěščřžýáíé.txt
list_of_files.txt
==>