44

Windows コマンドラインで tree コマンドを使用して、ディレクトリの内容を一覧表示するテキスト ファイルを生成しようとしていますが、出力をパイプすると、Unicode 文字が詰まってしまいます。

これが私が使用しているコマンドです:

tree /f /a > output.txt

コンソール ウィンドウの結果は問題ありません。

\---エリカ・ソバヤ
        カバー.jpg
        Erika szobája.m3u
        カタイ タマス - 01 Télvíz.ogg
        カタイ タマス - 02 Zölderdõ.ogg
        Kátai Tamás - 03 ルノワール kertje.ogg
        Kátai Tamás - 04 Esõben szaladtál.ogg
        Kátai Tamás - 05 Ázik az út.ogg
        Kátai Tamás - 06 Sûrû völgyek takaród.ogg
        Kátai Tamás - 07 Õszhozó.ogg
        カタイ タマス - 08 Mécsvilág.ogg
        カタイ タマス - 09 Zúzmara.ogg

しかし、テキストファイルはダメです:

\---エリカ・ゾブジャ
        カバー.jpg
        えりか szob ja.m3u
        K tai Tam s - 01 T‚lv¡z.ogg
        K tai Tam s - 02 Z”lderdä.ogg
        K tai Tam s - 03 ルノワール kertje.ogg
        K tai Tam s - 04 Esäben szaladt l.ogg
        K tai Tam s - 05 µzik az £t.ogg
        K tai Tam s - 06 S–r– v”lgyek takarad.ogg
        K tai Tam s - 07 åszhoz¢.ogg
        K tai Tam s - 08 M‚csvil g.ogg
        K tai Tam s - 09 Z£zmara.ogg

どうすればこれを修正できますか? テキスト ファイルは、コンソール ウィンドウの出力とまったく同じであることが理想的です。

/U スイッチを使用してコマンド ラインを実行するという Chris Jester-Young の提案 (何が起こったのか、Chris は削除しましたか?) を試してみました。VS2008 とメモ帳の両方でファイルを開こうとしましたが、どちらも同じ間違った文字が表示されます。

4

13 に答える 13

66

誰かがすでにこれを試しています:

tree /f /a |clip

メモ帳を開き、ctrl + V、メモ帳に Unicode サポート付きの output.txt として保存しますか?

于 2012-06-26T02:02:42.377 に答える
11

非 Unicode として出力する場合 (そうしているようです)、作成したテキスト ファイルは、コンソール ウィンドウが使用するのと同じエンコーディングを使用して表示する必要があります。そのため、コンソールで正しく表示されます。一部のテキスト エディターでは、ファイルを開くときにエンコード (または「コード ページ」) を選択できます。(Unicode として出力する方法がわかりません。cmd /U は、ドキュメントに記載されていることを実行しません。)

コンソールのエンコーディングは、Windows インストールによって異なります。私にとっては、Microsoft Word の「西欧 (DOS)」(または単に「MS-DOS」) です。

于 2008-09-26T10:59:40.637 に答える
6

コンソールのUnicode設定を尊重していない理由を調べてtree.com理解する必要があると判断しました。(多くのコマンドラインファイルユーティリティと同様に)、呼び出されたライブラリを使用ulib.dllしてすべての印刷(具体的にはinのTREE::DisplayName呼び出し)を実行することがわかりました。WriteStringulib

ここで、ulibでは、WriteStringメソッドは2つのクラスで実装されていSCREENますSTREAMSCREENバージョンは直接使用するため、すべてのWriteConsoleWUnicode文字が正しく表示されます。STREAMバージョンは、Unicodeテキストを3つの異なるエンコーディング(_UseConsoleConversions⇒コンソールコードページ(GetConsoleCP)、_UseAnsiConversions⇒デフォルトのANSIコードページ、それ以外の場合は⇒デフォルトのOEMコードページ)のいずれかに変換し、これを書き出します。変換モードを変更する方法がわかりません。また、変換を無効にできるとは思いません。

私はこれを簡単に見ただけなので、おそらくもっと冒険的な魂がそれについてもっと話すことができます!:-)

于 2008-09-26T12:54:49.913 に答える
5

これにより、結果が ASCII (情報交換のための米国標準コード) としてデスクトップに保存されます。ASCII\ANSI はすべての国際文字または拡張文字を認識しません。

tree /f > ascii.txt

これにより、ASCII テキストが Unicode に変換されます (/c は実際のコマンドの前に置く必要があります)。

cmd /u /c type ascii.txt > unicode.txt

では、ascii ファイルを一時ファイルと考えて削除してみませんか?

del ascii.txt

すべてを 1 行に入れる必要がある場合は、次を使用できます。

tree /f > ascii.txt & cmd.exe /u /c type ascii.txt > unicode.txt & del ascii.txt
于 2013-04-18T15:50:05.740 に答える
4

簡単に言えば、できないということです。これはtree.com、Windows 7 でも ANSI アプリケーションであるためです。

唯一の解決策は、独自のtree実装を作成することです。また、Microsoft にバグを報告することもできますが、Microsoft はまだそのことを認識していないのではないかと思います。

于 2010-05-04T17:22:20.383 に答える
4

あなたが試すことができます

tree /A > output.txt

CMD ラインとは異なるように見えますが、それでも許容できる可能性があります。:P

于 2013-01-25T08:23:36.300 に答える
2

これは私のために働いた:

tree /f /a > %temp%\Listing >> files.txt
于 2011-12-19T03:53:07.540 に答える