我使用此批处理指令生成不包含.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é‚\
我读到batch在默认情况下只能处理Unicode字符。有一些技巧可以让它吃带有重音的路径,但我发现没有什么技巧可以让它输出(回显)带有重音的结果。
你知道怎么做吗?我将不胜感激!
发布于 2014-12-20 21:05:15
在西欧国家的windows上,非Unicode控制台窗口中的标准代码页是code page 850,属于oem码页组。
西欧国家的windows上的非Unicode GUI窗口中的标准代码页是Windows-1252,虽然该代码页不是ANSI标准,但它属于一组ANSI代码页。但除了代码值为128 (0x80)到159 (0x9F)的字符之外,Windows-1252类似于标准化代码页ISO-8859-1。
由于大多数文件夹和文件名都是在Windows GUI应用程序中创建的,因此CODE值大于127的字符通常使用Windows-1252。
例如,文件夹名!déjàuploadé,为字节(十六进制)
21 20 64 E9 6A E0 20 75 70 6C 6F 61 64 E9 82
这15个字节使用代码页1252作为!déjàuploadé,,但使用代码页850作为!D,j…上传,‘
此批处理文件的解决方案是在使用echo输出文件夹名称并重定向到稍后在Windows GUI编辑器中打开的文本文件之前,使用chcp (更改代码页)命令。
@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 >>上的答案。
https://stackoverflow.com/questions/26991230
复制