输出到包含西里尔文内容的文本文件
Output to text file with cyrillic content
尝试通过 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
有什么想法吗?
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 的输出,这 对于最多 9,999 行相对容易。但这通常不实用。
否则 PowerShell 可能是您的最佳选择。例如,您可以修改 Show-Tree
脚本以输出目录以外的文件。
尝试通过 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
有什么想法吗?
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 的输出,这
否则 PowerShell 可能是您的最佳选择。例如,您可以修改 Show-Tree
脚本以输出目录以外的文件。