2017-05-28 7 views
1

cmdを通してドライブ内のフォルダとファイルのリストを出力しようとしています。 いくつかのフォルダはキリル文字で書かれているので、私は唯一得るのですか?シンボル。キリル文字のコンテンツを含むテキストファイルに出力

マイコマンド:

ツリー/ F/|クリップ

または

ツリー/ F/A> output.txtと

結果:

\---??????????? 
    \---2017 - ????? ??????? ???? 
      01. ?????.mp3 
      02. ? ???????.mp3 
      03. ????.mp3 
      04. ?????? ? ???.mp3 
      05. ?????.mp3 
      06. ???? ?????.mp3 
      07. ???????? ????.mp3 
      08. ??? ?? ?????.mp3 
      Cover.jpg 

+0

ファイル名とフォルダ名はWindows NTFSに16ビットUnicodeエンコーディングで内部的に格納され、tree.comなどのコンソールアプリケーションから出力されたときに8ビットOEMエンコーディングに変換されます。 Cyrilicサポートがインストールされていない場合(ControlPanel/RegionalSettings/Russian経由で)変換が失敗します。 – vitsoft

+1

@eryksun、あなたはその場を打つのであなたのコメントを答えとして要約することができるので、OPは受け入れるチャンスを持っていました。 – aschipfl

+0

@eryksun回答として投稿してください。私は 'cmd/u/c" dir/s/b "でテストしました。クリップ 'とそれが働いた。 – blfuentes

答えて

2

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スクリプトを変更して、ディレクトリに加えてファイルを出力することもできます。

関連する問題