将`dir`输出重定向到文件后编码不正确

时间:2012-03-28 10:36:33

标签: encoding batch-file cmd

我在欧洲的Windows cmd.exe上运行此代码,我在这里使用本地设置,用于我的语言。所以我在目录的名称中使用了变音符号。

我尝试列出目录的名称并正确显示。然后我将它们保存到文件中,但是当我在记事本中打开它时,变音符号是不可读的:例如,而不是Střední Čechy我有Stýednˇ ¬echy

我做错了什么,如何纠正?

@echo off
del directories.conf
FOR /F "delims=!" %%R IN ('dir * /b /a:d /o:n') DO (

 IF EXIST "%%R\scenery" ( 
  echo %%R
  echo %%R >> directories.conf
 ) ELSE (ECHO NOT INCLUDED %%R)

)
Echo Directory list created...
pause

2 个答案:

答案 0 :(得分:12)

尝试使用/ u开关启动cmd.exe。这将导致cmd以UTF-16写入。

您还需要使用chcp 1250切换到代码页1250(中欧的ANSI)。

您可以在批处理脚本中执行此操作。我为你做了一个。结构是:

.\Jižní Morava
.\Jižní Morava\scenery
.\Pelhřimov
.\Pelhřimov\scenery
.\Nic moc výlet
.\Střední Čechy
.\Střední Čechy\scenery

脚本:

@echo off

if _%1_==_main_ (
    call :main
) else (
    cmd /u /c "%0 main"
)
goto :eof

:main
    chcp 1250
    del directories.conf
    for /F "delims=!" %%R in ('dir * /b /a:d /o:n') do (
        if exist %%R\scenery (
            echo %%R
            echo %%R >> directories.conf
        ) else (
            echo not included: %%R
        )
    )
    echo Directory list created...
    pause
goto :eof

另外,我建议您阅读andrewdotn's great answer相关问题。

答案 1 :(得分:1)

作为替代解决方案(如果文件已生成),您只需重新编码您的文件。

Notepad++有此功能:

  • 转到编码>字符集
  • 选择具有正常渲染的相应字符集
  • 返回编码>字符集
  • 选择转换为UTF-8
  • 保存文件