Windowsシェルのchcp 65001
コマンドに問題があります。
フォルダ内のファイルのリストを生成する必要があります。だから私はcmd.exeを実行しました
cd folder
dir /B /O:N > list_of_files.txt
動作しましたが、一部のファイル名に含まれる特殊な非ASCII文字に問題がありました。 chcp 65001
を追加しました
すべてが機能しましたが、これらのコマンドを.batファイルに入れても、スクリプトは機能しません。
そう
cd folder
chcp 65001
dir /B /O:N > list_of_files.txt
リストを生成しません。
そして
cd folder
chcp 65001 && dir /B /O:N > list_of_files.txt
と同様
cd folder
chcp 65001 > nul && dir /B /O:N > list_of_files.txt
リストを生成しますが、デフォルトのエンコーディング:/を使用します。
すべてがcmd.exeで機能しますが、.batファイルでは機能しません。
私はトピックを読みました: stackoverflow.com/questions/2182568/batch-script-is-not-executed-if-chcp-was-called 、しかしそれは助けにはなりませんでした。
編集:私は問題を部分的に解決しました、chcp 65001
をchcp 1250
に変更しました。しかし、実際にはこれは質問に答えません。
使用する cmd /U
。 http://ss64.com/nt/cmd.html を参照してください:
最も一般的なテキストファイルはANSIです。文字セットを変換する必要がある場合は、これらのスイッチを使用してください。これらのオプションは、ファイルへの パイピングまたはリダイレクト に影響します。
/A
ANSI文字を出力する/U
出力UNICODE文字(UCS-2リトルエンディアン)
これが私の試みです(cmd /A
、 もちろん):
@ECHO OFF >NUL
SETLOCAL EnableExtensions
:: create a UNICODE file with Byte Order Mark using `wmic`
chcp 852 >NUL
>list_of_files.txt wmic os get localdatetime
:: store a line with BOM to a variable
:: although FINDSTR does not support UTF-16 files
:: it will read first three bytes at least
for /F "delims=" %%G in ('
findstr "^" list_of_files.txt
') do set "UTF8BOM=%%G"
:: write BOM only* to a file (* echo writes hexadecimal value FFFE0D0A)
:: the `<NUL set /p =text` trick does not work: chokes down leading `FF`
>list_of_files.txt echo(%UTF8BOM:~0,2%
chcp 65001 >NUL
:: add CRLF in Unicode (hexadecimal 0D000A00)
>>list_of_files.txt cmd /U /C echo(
:: add result of `dir /B /O:N` in Unicode
>>list_of_files.txt cmd /U /C dir /B /O:N
:: check the result: still invalid first line, see output
type list_of_files.txt
chcp 852 >NUL
出力。まだ無効な最初の行(16進数の0D0A
)、 ごめんなさい;別のメソッドを使用してpureUtf-8バイトオーダーマークを取得します。
==>cmd /A /C D:\bat\SO\UTF8BOM32182619.bat
cpANSI_OoCcSsUu.txt
cpANSI_ÖöÇ窺Üü.txt
escrzyaie.txt
ěščřžýáíé.txt
list_of_files.txt
==>
「chcp 65001」はWindows 7以前では機能しません。バッチがすぐに終了します。回避策はありません。
2003、XP、Vista、2008、7、8、および10を直接テストして、これを確認しました。
それは問題のように見えます 私は最近会った
cd folder
dir /B /O:N > list_of_files.tmp
cmd /U /C type list_of_files.tmp>list_of_files.txt
del list_of_files.tmp
Windows 7でのみテストされており、Windows Vistaでは動作しない場合があります。
どうやらchcp
はdir
に直接影響を与えません。
dir
の出力を解析し、echo
を介して出力します。
chcp 65001
>list_of_files.txt (for /f "delims=" %%a in ('dir /B /O:N') do echo %%a)
注:出力ファイルにはUTF-8 Byte Order Mark は含まれません。
Windows 2003ではこれが機能しました:
chcp 65001 && cmd /C dir C:\WINDOWS\* && chcp 866
C:\windows\*
-サンプルのみ
&& chcp 866
-デフォルトのコードページ。これにより、バッチを続行できます。
Windowsでは、実際のファイルのfile formatがコンソール(cmd.exe)のcodepageと同じであることを確認してください。スウェーデン語の文字åäöが一般的に使用されます。
エディターで(この場合)Notepad ++は、「Encode> Convert to ANSI」を押します。
スクリプト(batchfile)で、ファイル(Microsoftの1252 ANSIバージョン)と同じコードページを実行します。ファイル:
chcp 1252
cd c:\My Folder\Filename_with_åäö-characters.txt
これで動作するはずです。