2012-03-28 72 views
5

我在欧洲的Windows cmd.exe上运行此代码,我在这里使用本地设置,用于我的语言。所以我在目录名称中使用了变音符号。在将`dir`输出重定向到一个文件后错误的编码

我尝试列出目录的名称,并且它们显示正确。然后我将它们保存到文件中,但是当我在记事本中打开它时,变音符号是不可读的:例如,而不是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 
+0

这是Windows XP或Vista +? – 2012-03-28 10:55:59

+0

请不要把两个单独的问题放在一个问题中,特别是如果答案已经发布。这使得问题和答案在未来不太可用。我建议你1.恢复上次编辑2.尝试找到阅读问题的答案,3.如果找不到,请打开新问题 – 2012-03-28 14:55:59

回答

12

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

此外,您还需要使用chcp 1250切换到代码页1250(ANSI for Central Europe)。

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

.\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到一个相关的问题。

+0

在Windows 7上创建并测试 – 2012-03-28 11:15:01

+0

谢谢。我读过你引荐我的帖子。我有CP 852.然后我使用了几乎与你发布的脚本相同的脚本,但是我使用了CP 852.对我没有任何改变。如果我将CP更改为850,所以不会找到目录,因为不存在这样的目录(将使用不同的字符)。所以我可以尝试在echo filenamex >> output_filename之前设置CP,然后再设置CP。但在这种情况下,也没有任何反应。我也尝试^> ^>但没有创建文件。我无法使用cmd控制台,它是批处理文件作为用户的安装文件。 PS:你懂我的语言吗? – user1141649 2012-03-28 11:26:07

+0

对我而言,它适用于852和1250.我在Windows中的语言设置为英语,但我也安装了捷克语。但是,我编辑了批处理,以便它能够立即在Unicode模式下自行加热。也许它可以帮助你(至少避免引用问题)。 – 2012-03-28 11:54:23

0

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

Notepad++具有这样的特征:

  • 转到编码>字符集
  • 选择具有相应的字符集的优雅呈现
  • 回到编码>字符集
  • 选择转换为UTF-8
  • 保存您的文件
相关问题