Crear un archivo .bat para modificar un .txt.

El Problema

Es que, a mi me mandan cada día un archivo Excel. Os mando un trozo de base de datos como un ejemplo:

El archivo Se llama <Abdel.xls>

251085656|686026115|587695317;926589270;|[NOMBRE]=Abdelfatah El hadi;[APELLIDO]=Elhadi
25109875|936487915|639374567;|[NOMBRE]=JOSE;[APELLIDO]=ARRA

Con este archivo yo tengo que hacer lo siguiente:

1) Convertirlo a abdel.txt.

2) Quitarle una serie de Caracteres.

3) Guardarlo para luego poder Importarlo en el Access

<strong style="line-height: 1.5em;">Objetivo:

Crear un archivo .bat para yo ejecutarlo y me Reemplace o me borre las siguientes caracteres de la muestra que os pegue anteriormente:

1 REEMPLAZAR <[NOMBRE]=> por nada
2 REEMPLAZAR <;[APELLIDO]=> por <" "> (Espacio)
3 REEMPLAZAR <;> por nada

¿Por favor me podrían echar una mano? Os lo agradezco muchísimas gracias.

Abdel.


Respuesta
2

La nueva forma de funcionar de la página de Todoexpertos me ha permitido ver esta pregunta, ya un poco antigua. Si todavía te interesa, tal vez pueda ayudarte en la parte del archivo .bat.

Si es así dímelo.

Hola; si todavía estoy a la espera, Gracias.

¡Caray! Si que has tardado en contestar. Bueno, si, como dices, todavía te interesa el asunto prueba con esto:

@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
for /f "tokens=1,2,3,* delims==" %%a in (abdel.xls) do (
set linea=%%a%%b%%c%%d
set linea=!linea:[NOMBRE]=!
set linea=!linea:[APELLIDO]= !
Echo ! Linea!>> kkk.txt
)
REM copy /y kkk.txt abdel.xls

Como ya me sé que el editor de la página me va a cambiar la línea del echo poniéndomela como "Echo ! Linea!>> kkk.txt" advierto que tanto "echo" como "linea" lo escribí con minúscula (cosa que no afecta al resultado) y que entre la primera "!" y "linea" (o "Linea") no debe haber ningún espacio (y esto sí que es imprescindible).

Ya me dirás.

Por cierto, se me olvidó aclararte que el último comando, comentado con "rem" para que no se ejecute, no debería habilitarse hasta que compruebes que el kkk.txt tiene la información correcta.

Buenas, Gracias por tu ayuda.. pero no me funciono.. puede ser que no me exprese bien.
El .bat que me has indicado no me va, además me borra el archivo .txt

Te explico lo que necesito.

_________________________________________________________________________________

Yo cada día recibo un archivo abdel2015.txt del cual te adjunto unas líneas de muestra:


352645566|000000000|000000000;000000000|[NOMBRE]=Aabdel;[APELLIDO]=GALLEGO
380181544|000000000|000000000|[NOMBRE]=Gabdel;[APELLIDO]=Mabdel
380179434|000000000|000000000|[NOMBRE]=Jabdel;[APELLIDO]=BAbdel
380180352|000000000|000000000|[NOMBRE]=Pbdel CRISTINA;[APELLIDO]=Mabdel
380180252|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=GAbdel
380181371|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=Vabdel
362447042|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=BEabdel
________________________________________________________________________________

Lo que yo hago es modificar manualmente el dicho archivo .txt que viene llamado: abdel2015.txt. (te he marcado en negreta lo que estoy modificando manualmente y lo quiero automatizar)

LO QUE YO QUIERO ES:

Modificar el archivo abdel2015.txt con un ejecutable . BAT que me será más fácil, que hacerlo manualmente.

LO QUE QUIERO MODIFICAR ES:

Lo quiero reemplazar tal y como te estoy marcando en negreta

1 REEMPLAZAR [NOMBRE] por nada
2 REEMPLAZAR ;[APELLIDO] por " " (Espacio)
3 REEMPLAZAR ; por nada

Gracias.!

Se me había escapado el tratamiento del ";", creo que fue un despiste. Copio aquí la información de ejecución en mi entorno de pruebas para que puedas comprobar que funciona, o eso creo. Si se me ha escapado algún otro detalle dímelo porque será sencillo de arreglar. El aspecto más "imaginativo" de este bat es la utilización del "=" como delimitador, porque creo que es la única forma de poder eliminarlos. He supuesto que en cada línea el número máximo de "=" es de tres. Si hubiera más habría que retocar el bat.

D:\BAT>type abdel2015.txt
251085656|686026115|587695317;926589270;|[NOMBRE]=Abdelfatah El hadi;[APELLIDO]=Elhadi
25109875|936487915|639374567;|[NOMBRE]=JOSE;[APELLIDO]=ARRA
251085656|686026115|587695317;926589270;|[NOMBRE]=Pepito;[APELLIDO]=PÚrez
25109875|936487915|639374567;|[NOMBRE]=JOSE;[APELLIDO]=ARRANZ
251085656|686026115|587695317;926589270;|[NOMBRE]=Abdelfatah El hadi;[APELLIDO]=Elhadi
25109875|936487915|639374567;|[NOMBRE]=JOSE;[APELLIDO]=ARRA
352645566|000000000|000000000;000000000|[NOMBRE]=Aabdel;[APELLIDO]=GALLEGO
380181544|000000000|000000000|[NOMBRE]=Gabdel;[APELLIDO]=Mabdel
380179434|000000000|000000000|[NOMBRE]=Jabdel;[APELLIDO]=BAbdel
380180352|000000000|000000000|[NOMBRE]=Pbdel CRISTINA;[APELLIDO]=Mabdel
380180252|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=GAbdel
380181371|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=Vabdel
362447042|000000000|000000000|[NOMBRE]=Abdel;[APELLIDO]=BEabdel
D:\BAT>type abdel.bat
@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
for /f "tokens=1,2,3,* delims==" %%a in (abdel2015.txt) do (
set linea=%%a%%b%%c%%d
set linea=!linea:[NOMBRE]=!
set linea=!linea:[APELLIDO]= !
set linea=!linea:;=!
echo !linea!>> kkk.txt
)
REM copy /y kkk.txt abdel.xls
D:\BAT>abdel
No se encuentra D:\BAT\kkk.txt
D:\BAT>type kkk.txt
251085656|686026115|587695317926589270|Abdelfatah El hadi Elhadi
25109875|936487915|639374567|JOSE ARRA
251085656|686026115|587695317926589270|Pepito PÚrez
25109875|936487915|639374567|JOSE ARRANZ
251085656|686026115|587695317926589270|Abdelfatah El hadi Elhadi
25109875|936487915|639374567|JOSE ARRA
352645566|000000000|000000000000000000|Aabdel GALLEGO
380181544|000000000|000000000|Gabdel Mabdel
380179434|000000000|000000000|Jabdel BAbdel
380180352|000000000|000000000|Pbdel CRISTINA Mabdel
380180252|000000000|000000000|Abdel GAbdel
380181371|000000000|000000000|Abdel Vabdel
362447042|000000000|000000000|Abdel BEabdel

Primero listo (con "type abdel2015.txt") el abdel2015.txt construido, más o menos, a partir de tus dos ejemplos. A continuación listo (con "type abdel.bat") el bat, que incluye la línea que se me había olvidado para eliminar el ";". El mensaje "No se encuentra D:\BAT\kkk.txt" es normal porque inicialmente no existía y en el bat se hace un borrado previo. A continuación ejecuto (con "abdel") el bat anterior. Por último listo (con "type kkk.txt") el archivo auxiliar, que debe contener el abdel2015.txt pero con las modificaciones pretendidas. Una vez comprobado que funciona correctamente se le quita el "rem" a la última instrucción para que haga el copy de sustitución. Mientras tanto, se respeta el abdel2015.txt.

Por tanto, copia las líneas del abdel.bat a un archivo, asegurándote de que la línea del echo diga "echo !linea!>> kkk.txt" y no, como seguramente ocurre, "Echo ! Linea!>> kkk.txt". Y luego pruebas.

Si no funciona bien intenta hacer un pantallazo o algo para explicarme en qué falla.

Veo que esta vez no ha cambiado la línea del "echo" del abdel.bat. Por tanto no hay que hacer ningún cambio.

Mm, si más o menos tiene que quedar resuelto así.. pero lo que yo quiero.

Es cuando me llegue el archivo abdel2015.txt con mil registros, que anteriormente te he mandado un par de líneas para que veas que quiero reemplazar.

Entonces yo el paso que quiero hacer es.

Ejecutar el .bat directamente el dicho bat busca el archivo abdel2015.txt y lo modifica..

No hay problema, el bat tratará todo el archivo, sea del tamaño que sea. Prueba con el de las mil líneas y comprueba si lo que te deja en kkk.txt (o algún otro archivo con el nombre que te parezca) se ajusta a lo que quieres. Si es así le quitas el "rem" a la última instrucción y te machacará el archivo original con el modificado mediante el COPY /y. Lo que pasa es que para comprobar rápidamente si hace lo que quieres es más cómodo probar con una versión reducida. Pero la instrucción FOR trata todas las líneas del archivo que indica en el IN ().

¡Gracias! Muchísimas Gracias me funcionó, le quite unas líneas que sobraban como las de type, ya que me generaba un archivo type.

Claro hombre. Los type del ejemplo eran para mostrarte el contenido de los archivos, pero no formaban parte del bat

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas