Batch reemplazar Texto dentro de archivos

Necesitaría hacer un batch que pueda recorrer un directorio con archivos de texto y dentro de los mismos remplazar "0000000000000000" por espacios.

1 respuesta

Respuesta
3
Puedes probar con este:
@echo off
Setlocal EnableDelayedExpansion
if "%3" == "" goto ayuda
set cadorig=%1
set cadorig=%cadorig:"=%
set cadsust=%2
set cadsust=%cadsust:"=%
for %%f in (%3) do (call :cambiar %%f)
goto fin
:cambiar
set archivo=%1
for /f "tokens=* delims=" %%i in (%archivo%) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>%archivo%)
goto :EOF
:Ayuda
Echo Reemplaza una cadena por otra en el contenido de archivos (con comodines)
Echo Formato: %0 cadorig cadsust archivos
Echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un "="
Echo Ejemplo:
echo %0 de DE *.txt
:Fin
Lo salvas con el nombre que desees (por ejemplo, SUST.BAT) y lo ejecutas sobre los archivos del directorio que te interese, por ejemplo:
SUST 0000000000000000 " " C:\prueba\*.txt
Debería sustituir cualquier cadena con nueve ceros por nueve espacios en todos los archivos de extensión TXT del directorio C:\prueba. Como indica el texto de la ayuda si alguna de las cadenas tiene espacios hay que ponerla entre comillas, si no los tiene son opcionales. En este caso la cadena sustituidora los tiene y por eso la pongo entre comillas.
Seguro que se puede optimizar, porque es una adaptación de uno similar que preparé para otra consulta (en la que el cambio se pedía en solo un archivo seleccionable):
http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2197719/reemplazar-strings
Pero si sirve para tus necesidades supongo que estará cumplido el objetivo. Si tienes alguna duda o problema sigue preguntando.
Saludos,
GGG
Estamos en lo que estoy buscando, el único problema es que cuando hace el reemplazo lo pega debajo del texto original duplicando el resto de los datos:
Ejemplo:
001011008H000100000001420000000001MET02H1857501CHA7W0000000000100 0 000000000000000
001011008H000100000001420000000001MET02H1857501CHA7W0000000000100 0
Efectivamente. En la adaptación se me escapó el detalle de que usaba un archivo "temporal" para hacer la inserción de las líneas modificadas y me puse a hacerlas con ">>" sobre el archivo original, lo que hace que las añada en lugar de sustituirlas.
Prueba con esta modificación:
@echo off
Setlocal EnableDelayedExpansion
if "%3" == "" goto ayuda
set cadorig=%1
set cadorig=%cadorig:"=%
set cadsust=%2
set cadsust=%cadsust:"=%
for %%f in (%3) do (call :cambiar %%f)
goto fin
:cambiar
set archivo=%1
for /f "tokens=* delims=" %%i in (%archivo%) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>kk_temp.txt)
copy /y kk_temp.txt %archivo%
del /q kk_temp.txt
goto :EOF
:Ayuda
Echo Reemplaza una cadena por otra en el contenido de archivos (con comodines)
echo Utiliza un archivo temporal kk_temp.txt que no debe existir previamente
echo Formato: %0 cadorig cadsust archivos
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un "="
Echo Ejemplo:
echo %0 de DE *.txt
:Fin
Se utiliza el archivo temporal kk_temp.txt que no debería existir (porque si existía previamente nos estropea la primera utilización y luego lo va a borrar). Tiene la cosa fea de que va indicando la copia de cada uno de los archivos revisados. Supongo que se puede mejorar pero por si tienes prisa te lo paso tal cual
Suerte.
Saludos,
GGG

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas