我使用此批处理指令生成不包含.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字符。有一些技巧让它吃带有重音的路径,但我发现没有技巧可以使用重音输出(回声)结果。
你知道怎么做吗?我非常感激!
答案 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 >>上的答案。