1

フォルダー/ファイルをドラッグアンドドロップして、すべてのディレクトリ/ファイルとそのサブフォルダーのファイルを再帰的にファイルに出力したい。

@echo off
REM chcp 1250
REM chcp 65001

if [%1]==[] goto :eof
:loop
  echo %1 >> aText.txt
  for /f "tokens=* delims=" %%a in ('dir %1  /s /b') do (
    echo %%a >> aText.txt
  )
shift
if not [%1]==[] goto loop

aText.txt

@pause

それは問題なく動作しますが、Unicode ファイル名をサポートしていません。UTF-8またはUnicodeでbatファイル自体を保存しても機能しません。私はこれを見てきました: WindowsコマンドラインのUnicode文字 - どのように?

しかし、これではうまくいきません。私の推測では、chcp を使用すると、バッチ ファイルに Unicode を書き込むことができますが、作成するファイルには Unicode を書き込むことができません。Unicode ファイル名を作成するファイルに書き込むにはどうすればよいですか?

編集

私の質問をより正確に言い直すために。このユニコードをブラウザ(主にChromeなど)で読み取れるように記述したいのですが、今持っているのは次のとおりです。

@echo off
chcp 65001

if [%1]==[] goto :eof
:loop
  echo %1 > aText.txt
  for /f "tokens=* delims=" %%a in ('dir %1  /s /b') do (
echo   ^<br^>^<img src='%%a'^> >> aText.txt
REM    echo %%a >> aText.txt
  )
shift
if not [%1]==[] goto loop

aText.txt

@pause

これをメモ帳で開くと、Unicode が表示されます。(MC NDが回答で説明しているように)これにより、次のことがわかります。

D:\Downloads\unicodes 
  <br><img src='D:\Downloads\unicodes\sdsdsd.html'> 
  <br><img src='D:\Downloads\unicodes\ŽŽŽŽŽ.png'> 
  <br><img src='D:\Downloads\unicodes\中文.png'> 
  <br><img src='D:\Downloads\unicodes\文言.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.txt'> 
  <br><img src='D:\Downloads\unicodes\粵語.png'> 
  <br><img src='D:\Downloads\unicodes\한국어.png'> 

ただし、これをChromeで開くと、次のようになります。

D:\Downloads\unicodes 
  <br><img src='D:\Downloads\unicodes\sdsdsd - Kopie.txt'> 
  <br><img src='D:\Downloads\unicodes\sdsdsd.html'> 
  <br><img src='D:\Downloads\unicodes\ŽŽŽŽŽ.png'> 
  <br><img src='D:\Downloads\unicodes\中文.png'> 
  <br><img src='D:\Downloads\unicodes\文言.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.txt'> 
  <br><img src='D:\Downloads\unicodes\粵語.png'> 
  <br><img src='D:\Downloads\unicodes\한국어.png'> 

明らかに、txtファイルの名前をhtmlファイルに変更すると、pngファイルであっても壊れた画像がたくさんあります。

メモ帳で txt を手動で開き、txt ファイルを別の名前で再保存すると、設定されたエンコーディング (UTF-8) を変更しなくても、必要に応じてすべて正常に動作しますが、削除する必要があります。この手動保存。

npocmaka の CM \u ソリューションでは、各文字の間にスペースがあるものを取得していましたが、残念ながら、無駄に試した後、突然これを再現できないようで、代わりにこれを使用しました:

@echo off
chcp 65001

cmd /u /c for /f "tokens=* delims=" %%a in ('dir %1 /s /b') do ( echo %%a >> aText.txt )

aText.txt

私は得る

D:\Downloads>(echo D:\Downloads\unicodes\sdsdsd.html   ) 
D:\Downloads\unicodes\sdsdsd.html  

D:\Downloads>(echo D:\Downloads\unicodes\ŽŽŽŽŽ.png   ) 
D:\Downloads\unicodes\ŽŽŽŽŽ.png  

D:\Downloads>(echo D:\Downloads\unicodes\中文.png   ) 
D:\Downloads\unicodes\中文.png  

D:\Downloads>(echo D:\Downloads\unicodes\文言.png   ) 
D:\Downloads\unicodes\文言.png  

D:\Downloads>(echo D:\Downloads\unicodes\日本語.png   ) 
D:\Downloads\unicodes\日本語.png  

D:\Downloads>(echo D:\Downloads\unicodes\日本語.txt   ) 
D:\Downloads\unicodes\日本語.txt  

D:\Downloads>(echo D:\Downloads\unicodes\粵語.png   ) 
D:\Downloads\unicodes\粵語.png  

D:\Downloads>(echo D:\Downloads\unicodes\한국어.png   ) 
D:\Downloads\unicodes\한국어.png  

エコーがオフになっているにもかかわらず、その二重行出力自体は私にとって奇妙ですが、とにかく、メモ帳ではユニコードファイル名が表示されますが、クロムはtxtを開きたくなく、拡張子の名前をhtmlに変更すると、表示されます「ごみ」は次のとおりです。

D:\Downloads>(echo D:\Downloads\unicodes\sdsdsd.html ) D:\Downloads\unicodes\sdsdsd.html D:\Downloads>(echo D:\Downloads\unicodes\}}}}}.png ) D:\Downloads\unicodes\}}}}}.png D:\Downloads>(echo D:\Downloads\unicodes\-N‡e.png ) D:\Downloads\unicodes\-N‡e.png D:\Downloads>(echo D:\Downloads\unicodes\‡eŠ.png ) D:\Downloads\unicodes\‡eŠ.png D:\Downloads>(echo D:\Downloads\unicodes\åe,gžŠ.png ) D:\Downloads\unicodes\åe,gžŠ.png D:\Downloads>(echo D:\Downloads\unicodes\åe,gžŠ.txt ) D:\Downloads\unicodes\åe,gžŠ.txt D:\Downloads>(echo D:\Downloads\unicodes\µ|žŠ.png ) D:\Downloads\unicodes\µ|žŠ.png D:\Downloads>(echo D:\Downloads\unicodes\\Õm­´Å.png ) D:\Downloads\unicodes\\Õm­´Å.png

これは私が必要としているものではありません...

4

2 に答える 2

2

ファイルにユニコード文字として書き込みたい特定のwmicコマンドでこの問題が発生していました。問題を解決した方法は次のとおりです。

echo %%a |more>> aText.txt

興味のある方のために、これは WinPE でも機能します。

于 2016-09-12T21:58:16.537 に答える
0

ファイル名に Unicode 文字を含むファイル (∏∏∏∏.txt) を含むディレクトリ。

ページコード 850 では、dir コマンドは正しいファイル名を表示しますが、dir コマンドをファイルにリダイレクトすると、タイプまたはメモ帳の両方から ????.txt を含む ansi ファイルが生成されるだけです

ページコード 65001 の場合、dir コマンドは正しいファイル名を表示し、ファイルへのリダイレクトにより utf-8 ファイルが生成され、ページコード 65001 の下のタイプとページコード 850 の下の「ガベージ」で正しく表示されます。メモ帳には正しい値が表示されます。

(unicode) を使用cmd /uし、ページコード 850 または 65001 を使用すると、dir コマンドは正しい情報を表示しますが、リダイレクトにより Unicode ファイル (1 文字あたり 2 バイト) が生成されます。Type コマンドは、任意のページコードの文字間に「スペース」を表示します。メモ帳は問題なくファイルを処理します。

解決 ?簡単な解決策はありません。各プログラム/システム/ディスプレイは、異なることを理解しています。情報の最終的な出力を決定し、中間段階でデータがどのように表示されるかに関係なく、関連するすべての要素が目的の出力を生成できるようにします。

ファイル内の UNICODE 文字を取得するには、npocmaka コメントに答えて、必要なものを提供します。パラメーターとして /u を使用して新しい cmd インスタンスを開始し、Unicode コマンド ラインを取得します。

于 2013-10-30T11:48:29.540 に答える