tree.comは、cmd.exeとpowershell.exeのように、コンソールに書き込むときにネイティブのUTF-16エンコーディングを使用します。ですから、最初は出力をファイルやパイプにリダイレクトしてUnicodeも使用することを期待していました。 tree.comは、ほとんどのコマンドラインユーティリティと同様に、従来のコードページを使用してパイプやディスクファイルに出力をエンコードします。 64ビットWindowsでは、これは16ビットのDOSコードではなく、通常の64ビットの実行ファイルです。
パイプまたはディスクファイルに書き込むときには(これは歴史的ですが、ファイル名の ".com"いくつかのプログラムはコンソールの現在の出力コードページ(コンソールに接続されている場合)を使用しますが、OEMのデフォルト値はOEMのコードページ(西欧では1252)またはOEMコードページ(西ヨーロッパでは850など)をハードコードします。コンソールの出力コードページをchcp.com 65001
経由でUTF-8に変更できるため、後者の方が優れています。残念ながら、tree.comはOEMコードページを使用しています。何も使用するオプションはありません。
cmd.exeは、少なくとも、組み込みコマンドをUTF-16として出力するためのオプションを/u
で提供します。したがって、ツリー形式の出力が本当に必要ない場合は、単にcmdのdir
コマンドを使用することができます。たとえば:あなたは、ツリー形式の出力を必要とした場合は
cmd /u /c "dir /s /b" | clip
は、1つの回避策は、最大9,999行のためにどのcan be done比較的容易に、コンソール画面バッファから直接tree.comからの出力を読み込むことであろう。しかし、それは一般的に実用的ではありません。
そうしないと、おそらくPowerShellが最適です。たとえば、Show-Tree
スクリプトを変更して、ディレクトリに加えてファイルを出力することもできます。
ファイル名とフォルダ名はWindows NTFSに16ビットUnicodeエンコーディングで内部的に格納され、tree.comなどのコンソールアプリケーションから出力されたときに8ビットOEMエンコーディングに変換されます。 Cyrilicサポートがインストールされていない場合(ControlPanel/RegionalSettings/Russian経由で)変換が失敗します。 – vitsoft
@eryksun、あなたはその場を打つのであなたのコメントを答えとして要約することができるので、OPは受け入れるチャンスを持っていました。 – aschipfl
@eryksun回答として投稿してください。私は 'cmd/u/c" dir/s/b "でテストしました。クリップ 'とそれが働いた。 – blfuentes