Bat para modificar el orden de un texto separado por comas en un txt

Pues básicamente me estoy volviendo loco tengo una pistola que me lee unos campos para un programa tal que así

06/12/17,14:21:09,01,9999905773199

y me gustaría que me creara un fichero nuevo  al reves

9999905773199,01,14:21:09,06/12/17

¿Cómo lo veis? Cualquier ayuda es bienvenida...

1 Respuesta

Respuesta
1

Si hablas de un BAT asumo que las lecturas las guardas en un archivo y que quieres, a partir de ese archivo, obtener el otro con los campos cambiados. Si es así y los registros tienen siempre el mismo tamaño (34 caracteres por registro, si no he contado mal) el bat siguiente podría hacer lo que he supuesto:

@echo off
del /q modificado.txt
for /f "tokens=1,2,3,4* delims=," %%a in (original.txt) DO echo %%d,%%c,%%b,%%a>>modificado.txt

Se supone que los registros originales están en ORIGINAL.TXT y los modificados en MODIFICADOS.TXT. Si las cosas no son como he supuesto detalla un poco más a ver si se nos ocurre algo.

Perdón, el número de caracteres no importa (empecé a escribir pensando en una solución y luego encontré otra que me pareció mejor). Lo que sí importa es el número de comas de cada registro (3).

Muchísimas gracias, lo hace genial, pero resulta que el programa que lo lee, me da un datatime failed

Por 9999905773199,01,14:21:¿09,06/12/17 -----> se puede poner con otro formato?

aaaa/mm/dd

Prueba con esto:

@echo off
Setlocal EnableDelayedExpansion
del /q modificado.txt
for /f "tokens=1,2,3,4* delims=," %%a in (original.txt) DO (
set fecha=%%a
echo %%d,%%c,%%b,20!fecha:~6,2!/!fecha:~0,2!/!fecha:~3,2!>>modificado.txt
)

He supuesto que el formato de partida de la fecha era mm/dd/aa y que las cifras que faltan a la derecha del año son "20"

Lo 1 de todo agradecerte la rapidez, por que de verdad que me tengo que ir en dos días, y me estas dando la vida!

la pistola lo saca "mm/dd/aa" y el programa solo lee "aaaa/mm/dd"

Pero, ¿te ha funcionado o no?

Perdona es que no pude contestar antes, pues ahora no funciona, me crea el fichero pero en blanco

No se que pasa, por que volvía la versión anterior pero me pasa lo mismo, me creea el fichero pero esta en blanco.. jope

E:\>change.bat
"echo off" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

E:\>Setlocal EnableDelayedExpansion

E:\>del /q gescode.txt
"del " no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

E:\>for /f "tokens=1,2,3,4* delims=," %a in (original.txt) DO (
"for " no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

E:\>set fecha=%a
"set fecha" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

E:\>echo %d,%c,%b,20!fecha:~6,2!/!fecha:~0,2!/!fecha:~3,2! 1>>gescode.txt
"echo %d" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

Ya he reparado esos problemas de caracteres que introducía no se por que, pero sigue el texto en 0

@echo off
setlocal EnableDelayedExpansion 
del /q GESCODE.txt
for /f "tokens=1,2,3,4* delims=," %%a in (BARCODES.TXT) DO echo %%d,%%c,%%b,20!fecha:~6,2!/!fecha:~3,2!>>GESCODE.txt 

9999906760167,0B,11:25:47,2017/15

avanzando

No has copiado bien el nuevo BAT. Te falta algo tan esencial como

set fecha=%%a

Además de la parte del mes en el ECHO. Te lo reescribo con los nombres de tus ficheros y te sugiero que, antes de ejecutarlo, hagas un TYPE del bat para asegurarte que no se te han metido cosas raras:

@echo off
Setlocal EnableDelayedExpansion
del /q GESCODE.txt
for /f "tokens=1,2,3,4* delims=," %%a in (BARCODES.txt) DO (
set fecha=%%a
echo %%d,%%c,%%b,20!fecha:~6,2!/!fecha:~0,2!/!fecha:~3,2!>>GESCODE.txt
)

¿Te funcionó al final? Espero que sí y que esa sea la razón de la buena calificación...

pues si, muchísimas gracias,!!! super rápido y eficaz

Me alegro mucho. ¡Hasta otra!

Y si lo de irte en dos días era de vacaciones, disfrútalas y que no sean demasiado calurosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas