批量创建文件夹列表:无法回显重音字符

时间:2014-11-18 09:51:27

标签: batch-file non-ascii-characters

我使用此批处理指令生成不包含.zip文件的每个子目录的列表:

@echo off
for /d /r %%f in (*) do (
if not exist %%f\*.zip (
echo %%f >>G:\backup\folders.txt
)
)

问题是这会生成一个列表,其中重音会破坏返回的结果,例如

G:\backup\! d‚j… upload‚\

而不是

G:\backup\! déjà uploadé‚\

我读到该批处理默认只能处理Unicode字符。有一些技巧让它吃带有重音的路径,但我发现没有技巧可以使用重音输出(回声)结果。

你知道怎么做吗?我非常感激!

1 个答案:

答案 0 :(得分:1)

Windows上西欧国家/地区的非Unicode控制台窗口中的标准代码页为code page 850,属于OEM代码页组。

Windows上西欧国家的非Unicode GUI窗口中的标准代码页为Windows-1252,属于ANSI代码页组,尽管此代码页不是ANSI标准。但Windows-1252类似于标准化代码页ISO-8859-1,但代码值为128(0x80)到159(0x9F)的字符除外。

由于大多数文件夹和文件名是在Windows GUI应用程序中创建的,因此代码值大于127的字符通常使用Windows-1252。

例如文件夹名称! déjàuploadé,以字节为单位(十六进制)

21 20 64 E9 6A E0 20 75 70 6C 6F 61 64 E9 82

使用代码页1252作为显示15个字节的字体!似曾相反,,但使用代码页850作为! d,j ...上传,'

此批处理文件的解决方案是在使用 echo 输出文件夹名称并将其重定向到稍后打开的文本文件之前,使用命令 chcp (更改代码页) Windows GUI编辑器。

@echo off
chcp 1252>nul
for /d /r %%f in (*) do (
    if not exist %%f\*.zip (
        echo %%f>>G:\backup\folders.txt
    )
)

注意:>nul>>G:\backup\folders.txt没有剩余空间。有关解释,请参阅when running batch file from java , 1 randomly appears before >>上的答案。