[BATCH] Variables generadas con FOR no reconocen acentos

Iniciado por TitoHL., 5 Septiembre 2012, 05:01 AM

0 Miembros y 2 Visitantes están viendo este tema.

TitoHL.

Hola:
Como visitante he aprendido mucho consultando este foro, y por ello les agradezco. Pero ahora tengo un problema que no he podido solucionar.
Al generar una variable con el comando FOR, esta no reconoce los acentos.
Por ejemplo, en el siguiente código, FOR genera la variable MyMus, cuyo valor debería ser la ruta D:\Mis Documentos\Mi música. En cambio, el resultado es D:\Mis Documentos\Mi m·sica

@echo off
echo La salida del comando ECHO es:
ECHO     My Music    REG_SZ  D:\Mis Documentos\Mi m£sica
echo.
echo Con el comando FOR asignamos solo la ruta a la variable MyMus
FOR /F "tokens=3* delims=        " %%A IN ('ECHO     My Music    REG_SZ  D:\Mis Documentos\Mi m£sica') DO SET MyMus=%%B
echo.
echo Pero el valor de MyMus es %MyMus%


¿Cuál será la solución a esto?

Eleкtro

Cita de: TitoHL. en  5 Septiembre 2012, 05:01 AM¿Cuál será la solución a esto?
Se debe a la codificación en la que has guardado el bat...

Guardalo en codificación ANSI



Saludos.








TitoHL.

Gracias por tu comentario, Elektro. Pero, me temo que la codificación está bien. De hecho, si ejecutas el Batch, te darás cuenta de que el comando ECHO presenta la palabra música escrita correctamente.
Saludos.

Eleкtro

#3
Cita de: TitoHL. en  5 Septiembre 2012, 20:28 PMel comando ECHO presenta la palabra música escrita correctamente.
Claro, Porque hiciste la modificación necesaria del caracter, ¿Entonces cual es el problema que quieres resolver?
creo que uno de los dos se ha confundido

Cita de: TitoHL. en  5 Septiembre 2012, 05:01 AM('ECHO     My Music    REG_SZ  D:\Mis Documentos\Mi m£sica')

¿Estás seguro que la linea del script que estás probando lo tienes como el que he citado?...
Creo que te has podido confundir en eso, o me he confundido yo, Lo digo porque para que la consola te llegue a mostar mal el caracter que he marcado en rojo y en su lugar muestre el caracter del punto ".", deberia haber un "ú" en su lugar, y no un £. En el ejemplo citado ya hiciste la modificación necesaria del caracter para poder mostrarlo correctamente, Por eso es imposible que ocurra el error que dices tener y que no se muestre correctamente si lo has guardado en ANSI...

De todas formas no es algo preocupante, Batch no reconoce los caracteres latinos para mostrarlos, pero si para leerlos/usarlos, que es lo importante... Y si quieres mostrar un caracter pues tienes que hacer la modificación... Aquí puedes ver la diferencia:

Código (dos) [Seleccionar]
@Echo OFF
Set VAR=Música    & Call Echo Mal : %%VAR%% | MORE
Set VAR=%VAR:ú=£% & Call Echo Bien: %%VAR%% | MORE
Pause >NUL




PD: No se si habrás oido hablar del comando para cambiar el código de páginas (CHCP), Pero no te confundas, sirve para reconocer los caracteres, no te va a servir para mostrarlos. La única manera es como dije, o al menos, nunca he visto que sea posible de otra manera.

Un saludo








TitoHL.

#4
Disculpa, creo que fui poco claro.
Tengo Windows XP y deseo hacer un script que me cambie la ubicación de la carpeta Mi música. Para ello, lo primero que hago es identificar la ubicación actual de esta, usando el comando REG QUERY. Pero como la salida de este comando presenta mucha más información que la estrictamente necesaria, filtro la ruta de Mi música con el comando FOR. Finalmente, cuando quiero tener una variable cuyo valor sea la ruta de esta carpeta, ocurre que la ruta reemplaza la ú por el ·.
Corrijo el código
@echo off
echo La salida del comando REG QUERY es:
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"
echo.
echo Con el comando FOR asignamos solo la ruta anterior a la variable MyMus
FOR /F "tokens=3* delims=        " %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') DO SET MyMus=%%B
echo.
echo Pero el valor de MyMus es %MyMus%

Pero no creo que sirva en Vista o 7, porque la carpeta la carpeta Mi música me parece que se llama My music es estos OS.
NOTA: El script está guardado en ANSI.

Eleкtro

Cita de: TitoHL. en  6 Septiembre 2012, 03:40 AMFinalmente, cuando quiero tener una variable cuyo valor sea la ruta de esta carpeta, ocurre que la ruta reemplaza la ú por el ·.
Cita de: EleKtro H@cker en  5 Septiembre 2012, 21:54 PMDe todas formas no es algo preocupante, Batch no reconoce los caracteres latinos para mostrarlos, pero si para leerlos/usarlos, que es lo importante...
Lee lo que dije atentamente, Con eso quise decir que no importa que la variable "mymus" te muestre mal el caracter, Pero puedes usarlo para el propósito de crear/borrar una carpeta con el caracter "ú".

Ejemplo:
Código (dos) [Seleccionar]
@Echo OFF
CHCP 1250 >NUL
FOR /F "tokens=3*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') DO (SET "MyMusic=%%~nB")
Echo.
Echo El valor de MyMus es %MyMusic% | MORE

REM Test
:: Crear la capeta "C:\Mi Música"
MKDIR "%SYSTEMDRIVE%\%MYMUSIC%" && Echo la carpeta "%SYSTEMDRIVE%\%MYMUSIC%" se cre¢ correctamente.

Pause
Exit





De todas formas expliqué también que el error que comentas tener es imposible que te suceda tal y como lo estás describiendo.
Acabo de probar el último código que has puesto en una máquina virtual con Windows XP SP3 y muestra la variable "MYMUS" correctamente:

Código (dos) [Seleccionar]
@echo off
echo La salida del comando REG QUERY es:
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"
echo.
echo Con el comando FOR asignamos solo la ruta anterior a la variable MyMus
FOR /F "tokens=3*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') DO (SET MyMus=%%B)
echo.
echo El valor de MyMus es %MyMus%
Pause
Exit




saludos








TitoHL.

¡Grande maestro!
Tus últimos ejemplos me lo dejaron super claro. Y tal como supusiste, me confundí entre lo que se ve y lo que se reconoce.
El comando CHCP hace que funcione bien.
Muchas gracias.