Batch para sustituir cadena de texto

Modificar un txt los últimos cinco caracteres por cinco números que previamente debe preguntar. La sintaxis XXXXXXXXXX35444 y solo debe dejar poner números

1 Respuesta

Respuesta
1

¿Los cinco últimos caracteres de cada línea o los cinco últimos caracteres del archivo o se trata de un archivo de una sola línea, en cuyo caso serían las dos cosas?

Saludos cordiales,

Se trata de un archivo que contiene una sola línea xxxxxxxxxx12345 y debo cambiar cada vez a petición, los cinco últimos números y volver a dejar esa línea modificada, xxxxxxxxxx8888, en el mismo archivo txt, .

Muchas gracias

A ver si te vale esto:

@echo off
Setlocal EnableDelayedExpansion
if "%~1" == "" goto :ayuda
if not exist "%~1" echo El archivo %1 no existe&goto :fin
:pedir
set /p Sust=N£meros a sustituir:
for /l %%a in (0,1,4) do (
set cifra=!Sust:~%%a,1!
if !cifra! GTR 9 (echo Dato incorrecto&goto :pedir)
if !cifra! LSS 0 (echo Dato incorrecto&goto :pedir)
if "!cifra!" == "" (echo Dato incorrecto&goto :pedir)
)
for /f "tokens=*" %%x in ("%~1") do (
set Datos=%%x
echo %Datos:~0,-5%%Sust%>"%~1"
)
goto :fin
:Ayuda
Echo Reemplaza los cinco £ltimos caracteres de la £nica l¡Nea del archivo por cinco n£meros pedidos
echo Formato: %0 archivoTratar
echo Ejemplo:
echo %0 kk.txt
:Fin

Copias el texto anterior en un archivo y le llamas como quieras con extensión BAT (por ejemplo camb5num.bat). Luego lo ejecutas con camb5num archivo.txt siendo archivo.txt el nombre del archivo en el que quieres hacer el cambio. Puedes comprobar que solo admite números y que tienen que ser cinco. Si el nombre del archivo puede tener espacios habría que pasarlo entre comillas.

Ya me dirás.

Hola, he comprobado que no admite texto ni menos de 4 cifras , pero si que admite números de más de 5 cifras,  tampoco me ha modificado la única línea del archivo por los números pedidos. Una vez introducido el número con el formato correcto sale ~0,-5%Sust~1" pero no se modifica.

Como el archivo tendrá siempre el mismo nombre,  podría hacer que solo ejecutando el. Bat con doble clic hiciera todo el proceso? 

Muchas gracias por su tiempo 

Saludos 

Efectivamente. Se me pasó controlar que el número de cifras no fuera mayor que 5. Además aunque lo probé antes de copiarlo, está claro que debía funcionarme por no haber refrescado el "entorno de pruebas", porque ahora me ocurre exactamente lo que dices. Bueno ya lo he corregido. Pero si quieres trabajar sobre un archivo de nombre fijo este sería el BAT:

@echo off
Setlocal EnableDelayedExpansion
set archivo=xxxxx.xxx
:pedir
set /p Sust=N£meros a sustituir:
if not "%Sust:~5%" == "" (echo Excesivo n£mero de cifras. Deben ser 5&goto :pedir)
for /l %%a in (0,1,4) do (
set cifra=!Sust:~%%a,1!
if !cifra! GTR 9 (echo Cifra incorrecta&goto :pedir)
if !cifra! LSS 0 (echo Cifra incorrecta&goto :pedir)
if "!cifra!" == "" (echo Insuficiente n£mero de cifras. Deben ser 5&goto :pedir)
)
for /f "tokens=*" %%x in ('type "%archivo%"') do (
set Datos=%%x
echo !Datos:~0,-5!!Sust!>"%archivo%"
)

En la tercera línea sustituye el xxxxx. Xxx por el nombre del archivo con la extensión (y el path si fuera necesario) sin comillas.

Dime si ya va bien.

Por cierto, al menos durante las pruebas, para que no se cierre la ventana MSDOS sin que se pueda ver si ha dicho algo, sería conveniente terminar con el comando "pause" (sin comillas).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas