Batch: cambiar los caracteres acentuados
MarcusDom
-
MarcusDom Mensajes publicados 53 Estado Miembro -
MarcusDom Mensajes publicados 53 Estado Miembro -
Hola,
Configuración: Windows XP / Internet Explorer 8.0
Quiero crear una tarea programada que llame a un archivo .bat y que sirva para cambiar todos los valores de los caracteres acentuados por su carácter estándar. é -> e, por ejemplo.
Después de haber revisado los comandos batch, debo admitir que estoy un poco perdido para realizar este tipo de tarea. Para eliminar una línea, copiar un archivo o ejecutar un comando está bien, pero esto es un poco complicado. Si alguien pudiera ayudarme a resolver este problema, sería realmente amable, ya que aparentemente es la última etapa de mi proyecto.
El contexto es que estoy importando un archivo LDIF en un openLDAP y no procesa bien los acentos, especialmente después de las modificaciones que ya le he hecho antes (los é se transforman en ,).
Gracias
Configuración: Windows XP / Internet Explorer 8.0
Quiero crear una tarea programada que llame a un archivo .bat y que sirva para cambiar todos los valores de los caracteres acentuados por su carácter estándar. é -> e, por ejemplo.
Después de haber revisado los comandos batch, debo admitir que estoy un poco perdido para realizar este tipo de tarea. Para eliminar una línea, copiar un archivo o ejecutar un comando está bien, pero esto es un poco complicado. Si alguien pudiera ayudarme a resolver este problema, sería realmente amable, ya que aparentemente es la última etapa de mi proyecto.
El contexto es que estoy importando un archivo LDIF en un openLDAP y no procesa bien los acentos, especialmente después de las modificaciones que ya le he hecho antes (los é se transforman en ,).
Gracias
6 respuestas
for /f "delims=" %%a in ('type fichier1.txt') do call :commande "%%a" goto :eof :commande set ligne=%1 set ligne=%ligne:"=% set ligne=%ligne:é=e% set ligne=%ligne:è=e% set ligne=%ligne:à=a% @echo %ligne% >>fichier2.txt Fichier1.txt : He ido a la playa.
Fichier2.txt : He ido a la playa.
Después tú puedes modificarlo a tu manera.
Saludos.
Con el fin de mantener los acentos, ¿has intentado reemplazar las é por ' ?
Dado que el sitio no acepta caracteres especiales, te adjunto el archivo directamente.
http://www.cijoint.fr/cjlink.php?file=cj201008/cijIXP2wlV.zip
Fichero1.txt : Fui a la playa.
Fichero2.txt : Esta mañana fui a la, ... la playa.
@CMD
PD: El sitio no acepta caracteres, para encontrar los caracteres que reemplazarán los acentos, hay que lanzar CMD y ejecutar edit (ejemplo: C:\> edit Fichero1.txt) luego poner tus caracteres acentuados (ejemplo: é a è ù etc ...) guardarlo y abrirlo con el bloc de notas y tendrás los caracteres.
Saludos.
for /f "delims=" %%a in ('type lol.txt') do call :commande "%%a" goto :eof :commande set ligne=%1 set ligne=%ligne:"=% set ligne=%ligne:é='% set ligne=%ligne:à=...% @echo %ligne% >>fichier2.txt Dado que el sitio no acepta caracteres especiales, te adjunto el archivo directamente.
http://www.cijoint.fr/cjlink.php?file=cj201008/cijIXP2wlV.zip
Fichero1.txt : Fui a la playa.
Fichero2.txt : Esta mañana fui a la, ... la playa.
@CMD
C:\>type fichier2.txt Esta mañana fui a la playa.
PD: El sitio no acepta caracteres, para encontrar los caracteres que reemplazarán los acentos, hay que lanzar CMD y ejecutar edit (ejemplo: C:\> edit Fichero1.txt) luego poner tus caracteres acentuados (ejemplo: é a è ù etc ...) guardarlo y abrirlo con el bloc de notas y tendrás los caracteres.
Saludos.
Gracias por tus respuestas tan rápidas, pero tengo muchos problemas.
Por sed he echado un vistazo, pero a priori no funciona.
Luego, para tu primer script, me cambia mis é por ,.
¿Puedes decirme qué significa set ligne=%1
y set ligne=%ligne:"=%?
Además, me elimina mis líneas vacías.
Entonces estoy manipulando archivos ldif codificados en UTF-16LE y cada vez que uso el script me guarda el archivo de salida en ANSI.
Pero bueno, es similar a archivos de texto y lo más complicado es que tengo que hacerlo todo en batch para hacer una tarea programada.
Ahora voy a echar un vistazo a tu segunda solución.
Gracias por tu contribución :)
Por sed he echado un vistazo, pero a priori no funciona.
Luego, para tu primer script, me cambia mis é por ,.
¿Puedes decirme qué significa set ligne=%1
y set ligne=%ligne:"=%?
Además, me elimina mis líneas vacías.
Entonces estoy manipulando archivos ldif codificados en UTF-16LE y cada vez que uso el script me guarda el archivo de salida en ANSI.
Pero bueno, es similar a archivos de texto y lo más complicado es que tengo que hacerlo todo en batch para hacer una tarea programada.
Ahora voy a echar un vistazo a tu segunda solución.
Gracias por tu contribución :)
( Disculpa si publico el mismo mensaje varias veces, pero no aparecen en la discusión )
Tu primer script funciona pero únicamente si mi archivo está convertido a ANSI antes de usar tu script. Y me elimina mis líneas vacías del archivo, un elemento obligatorio para hacer la distinción entre 2 entradas.
¿Hay un comando en batch que convierta un documento a ANSI?
¿Y también un comando para añadir una línea vacía después de un cierto número de líneas? Por ejemplo, un módulo 10 para que se inserte una línea después de cada entrada.
Gracias
Tu primer script funciona pero únicamente si mi archivo está convertido a ANSI antes de usar tu script. Y me elimina mis líneas vacías del archivo, un elemento obligatorio para hacer la distinción entre 2 entradas.
¿Hay un comando en batch que convierta un documento a ANSI?
¿Y también un comando para añadir una línea vacía después de un cierto número de líneas? Por ejemplo, un módulo 10 para que se inserte una línea después de cada entrada.
Gracias
Re
He intentado tu código pero solo funciona si mi archivo está convertido a ANSI. Quizá exista una forma de convertir un archivo UTF-16LE a ANSI desde la línea de comandos.
Y el otro problema es que está eliminando todas las líneas vacías.
Entonces, ¿podemos:
- Añadir una línea después de cada entrada? la última línea de cada entrada termina con givenName : nombre de la entrada
- Añadir dos líneas vacías al final del archivo, es una norma para los archivos ldif.
El segundo código no funciona, la importación en el programa genera errores, pero una solución me basta :)
He intentado tu código pero solo funciona si mi archivo está convertido a ANSI. Quizá exista una forma de convertir un archivo UTF-16LE a ANSI desde la línea de comandos.
Y el otro problema es que está eliminando todas las líneas vacías.
Entonces, ¿podemos:
- Añadir una línea después de cada entrada? la última línea de cada entrada termina con givenName : nombre de la entrada
- Añadir dos líneas vacías al final del archivo, es una norma para los archivos ldif.
El segundo código no funciona, la importación en el programa genera errores, pero una solución me basta :)
Algo nuevo, he utilizado el comando sed para la uniformización de caracteres y funciona bastante bien :)
Lo recomiendo, hay algunas sutilezas respecto a la sintaxis de Linux, así es como lo he utilizado:
sed s/é/e/ archivo.ldf > temp.ldf
sed s/è/e/ temp.ldf > temp2.ldf
sed s/ô/o/ temp2.ldf > temp3.ldf
sed s/ê/e/ temp3.ldf > temp4.ldf
sed s/î/i/ temp4.ldf > temp5.ldf
sed s/û/u/ temp5.ldf > archivo.ldf
del temp.ldf
del temp2.ldf
del temp3.ldf
del temp4.ldf
del temp5.ldf
No sé si es óptimo, pero al menos funciona, y hay que repetir algunas líneas para las palabras que tendrían el mismo carácter varias veces.
Gracias y buena continuación.
Lo recomiendo, hay algunas sutilezas respecto a la sintaxis de Linux, así es como lo he utilizado:
sed s/é/e/ archivo.ldf > temp.ldf
sed s/è/e/ temp.ldf > temp2.ldf
sed s/ô/o/ temp2.ldf > temp3.ldf
sed s/ê/e/ temp3.ldf > temp4.ldf
sed s/î/i/ temp4.ldf > temp5.ldf
sed s/û/u/ temp5.ldf > archivo.ldf
del temp.ldf
del temp2.ldf
del temp3.ldf
del temp4.ldf
del temp5.ldf
No sé si es óptimo, pero al menos funciona, y hay que repetir algunas líneas para las palabras que tendrían el mismo carácter varias veces.
Gracias y buena continuación.