尝试通过cmd
获取输出,其中包含驱动器中的文件夹和文件列表。
有些文件夹是用西里尔字母写的,所以我只能得到???符号。
我的命令:
tree / f / a | clip
或
tree / f / a> output.txt
结果:
\---???????????
\---2017 - ????? ??????? ????
01. ?????.mp3
02. ? ???????.mp3
03. ????.mp3
04. ?????? ? ???.mp3
05. ?????.mp3
06. ???? ?????.mp3
07. ???????? ????.mp3
08. ??? ?? ?????.mp3
Cover.jpg
有什么想法吗?
答案 0 :(得分:2)
tree.com在写入控制台时使用本机UTF-16编码,就像cmd.exe和powershell.exe一样。因此,首先您希望将输出重定向到文件或管道以使用Unicode。但是,与大多数命令行实用程序一样,tree.com使用旧代码页将输出编码为管道或磁盘文件。 (说到遗产,文件名中的" .com"是历史性的。在64位Windows中,它是常规的64位可执行文件,而不是16位DOS代码。)
当写入管道或磁盘文件时,某些程序硬编码系统ANSI代码页(例如西欧的1252)或OEM代码页(例如西欧的850),而有些则使用控制台的当前输出代码页(如果连接到控制台),默认为OEM。后者会很棒,因为您可以通过chcp.com 65001
将控制台的输出代码页更改为UTF-8。不幸的是,tree.com使用OEM代码页,没有选择使用其他任何东西。
cmd.exe至少提供/u
选项以将其内置命令输出为UTF-16。因此,如果您不需要树格式输出,则可以使用cmd' dir
命令。例如:
cmd /u /c "dir /s /b" | clip
如果确实需要树格式输出,一种解决方法是直接从控制台屏幕缓冲区读取tree.com的输出,can be done相对容易地读取最多9,999行。但这通常不实用。
否则PowerShell可能是您的最佳选择。例如,您可以修改Show-Tree
脚本以输出除目录之外的文件。