我在Windows Shell中的chcp 65001命令有问题。

我需要在文件夹中生成文件列表。
所以我运行了cmd.exe,输入

cd folder
dir /B /O:N > list_of_files.txt

它可以工作,但是我在某些文件名中使用特殊的非ASCII字符时遇到了问题。
所以我加了chcp 65001
一切正常,但是当我将这些命令放入.bat文件时,该脚本不起作用。

所以
cd folder
chcp 65001
dir /B /O:N > list_of_files.txt

不会生成列表。


cd folder
chcp 65001 && dir /B /O:N > list_of_files.txt


cd folder
chcp 65001 > nul && dir /B /O:N > list_of_files.txt

生成列表,但使用默认编码:/。

一切都可以在cmd.exe中运行,但不能在.bat文件中运行。

我已经阅读了主题:stackoverflow.com/questions/2182568/batch-script-is-not-executed-if-chcp-was-called,但没有帮助。

编辑:
我部分解决了我的问题,因为所有字符都在此编码中,所以将chcp 65001更改为chcp 1250。但这实际上并不能回答问题。

最佳答案

使用cmd /U。参见http://ss64.com/nt/cmd.html:



这是我的尝试(当然,在cmd /A下启动):

@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 `<NUL set /p =text` trick does not work: chokes down leading `FF`
>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

输出。仍然无效的第一行(该十六进制0D0A),抱歉;使用另一种方法来获取纯Utf-8字节顺序标记:
==>cmd /A /C D:\bat\SO\UTF8BOM32182619.bat
਍
cpANSI_OoCcSsUu.txt
cpANSI_ÖöÇ窺Üü.txt
escrzyaie.txt
ěščřžýáíé.txt
list_of_files.txt

==>

10-07 19:09