2012-03-28 19 views
5

Ejecuto este código en Windows cmd.exe en Europa y utilizo la configuración local aquí, para mi idioma. Entonces uso diacríticos en los nombres de los directorios.Codificación incorrecta después de redirigir la salida `dir` a un archivo

Intento mostrar los nombres de los directorios y se muestran correctamente. Luego los guardo en un archivo, pero cuando lo abro en el bloc de notas, los signos diacríticos no son legibles: por ejemplo, en lugar de Střední Čechy tengo Stýednˇ ¬echy.

¿Qué hice mal y cómo puedo corregirlo?

@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

¿Es este Windows XP o Vista +? –

+0

Por favor, no ponga dos problemas separados en una sola pregunta, especialmente si las respuestas ya han sido publicadas. Esto hace que tanto la pregunta como la respuesta sean menos útiles en el futuro. Te sugiero 1. invierte la última edición 2. intenta encontrar la respuesta al problema de lectura, 3. si no la encuentras, abre una nueva pregunta –

Respuesta

12

Pruebe a iniciar cmd.exe con/u cambiar. Eso hará que cmd escriba en UTF-16.

También debe pasar a la página de códigos 1250 (ANSI para Europa Central) usando chcp 1250.

Puede hacerlo dentro de su secuencia de comandos por lotes. Hice uno para ti. La estructura es:

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

Y el guión:

@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 

También te recomendamos leer andrewdotn's great answer a una pregunta relacionada.

+0

Creado y probado en Windows 7 –

+0

Gracias. Leo la publicación que me refieres. Tengo CP 852. Luego usé casi la misma secuencia de comandos que publicaste, pero utilicé CP 852. No me cambiaste. Si pudiera cambiar CP a 850, no se encontrarán directorios porque no existen tales directorios (se usarían caracteres diferentes). Así que podría intentar configurar el CP antes de echo filename filename >> output_filename y luego volver a establecer el CP. Pero en este caso tampoco pasa nada. También probé ^> ^> pero no se creó ningún archivo. No puedo usar la consola de cmd, es un archivo por lotes como archivo de instalación para los usuarios. PD: ¿Entiendes mi lenguaje? – user1141649

+0

Para mí funciona tanto con 852 como con 1250. Mi idioma en Windows está configurado en inglés, aunque también tengo instalado Czech. Sin embargo, edité el lote para que se caliente automáticamente en modo Unicode. Tal vez podría ayudarte (al menos evita los problemas de las citas). –

0

Como solución alternativa (si el archivo ya está generado) puede recodificar su archivo.

Notepad++ tiene esta característica:

  • Ir a Codificación> juegos de caracteres
  • Seleccione el juego de caracteres apropiado que tiene una grácil render
  • Ir de nuevo a Codificación> Juegos de caracteres
  • Seleccionar Convertir a UTF-8
  • Guarde su archivo
Cuestiones relacionadas