批处理文件:重定向tree命令输出至文件时为何出现奇怪ASCII字符?
为什么Windows的tree命令重定向后会出现奇怪的ASCII字符?
先看问题场景:执行下面的批处理代码后,非根文件夹行首出现类似带下划线的上标"a"的奇怪字符,即使直接在Win11命令提示符里执行tree >tempfile再type tempfile也会复现,和findstr等操作无关。
批处理代码:
if "%DispMode%"=="tree" ( tree >temp findstr /b /v /c:"F" temp >>temp2 del temp >nul findstr /b /v /c:"V" temp2 >>temp del temp2 >nul findstr /b /v /c:"A" temp >>temp2 del temp >nul type temp2 del temp2 >nul )
原因解释
这是字符编码不匹配导致的:
- Windows的
tree命令默认输出的是OEM代码页(比如437或850,DOS时代的字符集)里的方框绘图字符,用来显示树形结构的连线(比如├、└这类线条)。 - Win11的命令提示符默认使用UTF-8代码页(65001),当你把
tree的输出重定向到文件,再用type查看时,UTF-8编码环境会把OEM的绘图字符错误解码,就变成了你看到的奇怪符号(那个带下划线的"a"其实是OEM字符集中的连线字符被乱码后的结果)。
验证方法
在命令提示符里执行chcp 437切换到OEM代码页,再执行type tempfile,就能看到正常的树形连线字符了。
内容的提问来源于stack exchange,提问作者fortissimo
相关产品推荐
相关产品推荐

