Combinar datos en un Texto por Batch.

Necesito de su colaboración y de su ayuda quiero crear un batch con

Las siguientes características:

1-Primero que los datos que están guardados en un .txt se combinen en uno solo y se remplacen, por ejemplo:

Los únicos datos que están en el texto son estos:

Enable Key 0: H4ABrl9H12mwadheb7

Datos:

De esta manera me gustaría que se combinen

Datos: H4ABrl9H12mwadheb7

La "Enable Key 0" es variable siempre cambia.

2-Segundo que guarde el texto a partir de este dato:

STRING: b0:c2:87:d6:ab:aa

Me gustaría que se guardara de esta manera

1-b0c287d6abaa.txt

El STRING: nunca será el mismo es variable.

2 respuestas

Respuesta
1

Siempre hay dos puntos y un espacio en ambos casos por epemplo

Enable Key 0: H4ABrl9H12mwadheb7

STRING: b0:c2:87:d6:ab:aa

El Enable Key 0: y el STRING: Siempre estan presentes.

Respuesta
1

Habría que encontrar algo en común en ambos casos. Por ejemplo, ¿hay siempre dos puntos seguidos de un espacio entre lo que queremos eliminar/sustituir y lo que queremos mantener?

Obviamente si no hay nada en común difícilmente se va a poder hacer nada con un programa (sea bat o en cualquier otro lenguaje)

Creo que te había entendido mal y que la situación puede ser más sencilla de lo que creía. Cuando decías "La "Enable Key 0" es variable siempre cambia." pensé que te referías al propio literal "Enable Key 0" y no al valor de esa clave. Y lo mismo cuando hablabas de STRING. Resumiendo creo que lo que quieres es que en un caso se sustituya "Enabel Key 0" por "Datos" (no me queda muy claro si ya hay una linea en la que pone "Datos:" en esos archivos, al principio pensé que sí pero ahora no lo tengo tan claro) y en el otro caso se sustituya "STRING: " por "1-". Creo que el siguiente bat podría servirte para ambas cosas:

@echo off
Setlocal EnableDelayedExpansion
del /q kkk.txt
if "%3" == "" goto ayuda
set cadorig=%~1
set cadsust=%~2
for /f "tokens=* delims=" %%i in (%3) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >> kkk.txt)
goto fin
:ayuda
echo Reemplaza una cadena por otra en todo el contenido de un archivo
echo Formato: %0 cadorig cadsust archivo
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un "=" o dobles comillas y no distingue mayusculas
echo El archivo corregido se deja en kkk.txt
echo Ejemplo:
echo %0 de DE kk.txt
:Fin

Lo puedes salvar como CAMBCAD.BAT (por ejemplo) y en el primer caso lo utilizas así:

CAMBCAD "Enable Key 0" Datos archivo1.txt

En el que archivo1.txt es el nombre del archivo del primer tipo.

En el segundo caso la utilización sería:

CAMCAD "STRING: " 1- archivo2.txt

En el que archivo2.txt sería el nombre del archivo del segundo tipo.
Como se dice en la ayuda integrada, los archivos modificados se dejan en kkk.txt. Si se quisiera reescribir el archivo original después de realizar el cambio bastaría con incluir después de la etiqueta ":fin" el comando

copy /y kkk.txt %3

Si tienes algún problema me lo dices aunque lo cierto es que la página no me mandó tu respuesta y ha sido por casualidad que le he visto hoy. Les daré un toque para ver si lo arreglan.

Gracias por tu pronta respuesta soluciono parcialmente mi problema en el primer caso, pero en el segundo no, lo que quiero que haga en el mismo es, por ejemplo:

tengo este dato en un archivo de texto STRING: b0:c2:87:d6:ab:aa  el mismo esta nombrado como 1-.txt y quiero que ese archivo se renombre a partir del resultado del STRING que es variable el resultado final sería este 1-b0c287d6abaa.txt si te fija STRING: b0:c2:87:d6:ab:aa ,  se borra el STRING: y los :  para quedar 1-b0c287d6abaa.txt. Este resultado siempre cambia b0:c2:87:d6:ab:aa Gracias por tu atención.

No había entendido bien lo que pretendías en el segundo caso. Lo que he entendido ahora es que tienes un archivo, de nombre 1-.txt, y contenido variable pero según el esquema:

STRING: b0:c2:87:d6:ab:aa

Y se trata de renombrar el archivo a 1-b0c287d6abaa.txt (en este caso, en general habría que poner lo que sigue a STRING: eliminando los dos puntos).

Si esta vez lo he entendido bien esto debería hacerlo:

@echo off
if "%1" == "" goto ayuda
for /f "tokens=1,2,3,4,5,6* delims=: " %%a in (%1) do (if %%a == STRING ren %1 1-%%b%%c%%d%%e%%f%%g.txt)
goto fin
:Ayuda
Echo Renombra un archivo segun datos de su contenido
Echo Formato: %0 archivo
echo %0 1-.txt
:Fin

Como no me quedaba muy claro que el archivo a renombrar se llamara siempre 1-.txt lo he dejado para pasarlo como parámetro. Si siempre se llama así podría valer con esto:

@echo off
for /f "tokens=1,2,3,4,5,6* delims=: " %%a in (1-.txt) do (if %%a == STRING ren 1-.txt 1-%%b%%c%%d%%e%%f%%g.txt)

El archivo puede tener más líneas, pero solo debe tener una con el formato STRING: uu:vv:ww:xx:yy:zz

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas