¿Podría explicarme un ejemplo con un Bat para editar?

Quisiera ver la forma de modificar un archivo de texto, el cual se le tiene que agregar " -- " a una serie de archivos y hacerlo de forma automática con un bat, que jale el archio lo modifique y lo deje en la misma ruta

1 respuesta

Respuesta
1

No me queda muy claro si lo que quieres es añadir los caracteres "--" a todas las líneas de un archivo, o solo a la primera, o al nombre del archivo y tampoco si los quieres añadir al principio o al final de la línea o del nombre. Aclárame estos puntos y te facilitaré un ejemplo.

e

Ese es el código, no se porque no me dejo el sistema, poner el código en la caja del comentario, te decía quiero poner en la primera línea ( -- ) y que continué el texto, el código de abajo ya lo hace pero quisiera hacerlo de forma un poco más masiva para 10 archivos al mismo tiempo. Saludos

He tenido que copiar a mano el texto para poder hacer pruebas. No sé cuál pudo ser el problema que te impidió copiarlo en lo que llamas "caja del comentario" (imagino que es este espacio en el que se escribe el resto del texto). Yo utilizo la herramienta "snippet" a la que se accede mediante el incono "<>" de la barra de herramientas de la página. Te paso una posible solución:

@echo off
set v1-old=UPDATE DESTINATION
set v1-new=--UPDATE DESTINATION
rem set file=C:\Users\fernando.constantino\Documents\_BATCH\21043_off.sql
set folder=C:\Users\fernando.constantino\Documentes\_BATCH
for /f %%x in ('dir /b %folder%\*_off.sql') do set file=%%x&call :tratar
pause
goto :eof
:tratar
echo Archivo viejo
echo -------
type %file%
echo -------
for /f "tokens=*" %%a in (%file%) do call :wri %%a
type "%file%.bak" > "%file%
del f/q/a "%file%.bak"
echo.
echo Archivo modificado
echo -------
type %file%
echo -------
rem pause
goto :eof
:wri
set lin=%*
call set lin=%%lin:%v1-old%=%v1-new%%%
echo %lin%>>"%file%.bak"
goto :eof

Se supone que debe aplicar el tratamiento a todos los archivos seleccionados  en el primer FOR, que, a modo de ejemplo, serían los que tienen la extensión SQL y su nombre acaba en _off. Debes ajustar ese FOR para adaptarlo a tus necesidades. Ya me contarás.

Le agradezco, no había tenido la oportunidad de conectarme por este medio, por otro lado, el archivo quedo muy bien, solo seria la cuestión, que al momento de que edite los archivos automáticamente, se podrían colocar en otra carpeta.

Por lo que veo en el bat original la línea 10 (type "%file%.bak" > "%file%") es la responsable de la reescritura/modificación de los archivos. Por tanto bastaría cambiarla de modo que al archivo destino estuviera en la carpeta que te interese. Pero eso no puede hacerse con un TYPE según las pruebas que acabo de hacer, habría que hacerlo con un MOVE lo que haría innecesario el borrado posterior del %file%. Bak. El bat quedaría:

@echo off
set v1-old=UPDATE DESTINATION
set v1-new=--UPDATE DESTINATION
rem set file=C:\Users\fernando.constantino\Documents\_BATCH\21043_off.sql
set folder=C:\Users\fernando.constantino\Documents\_BATCH
set fold_dest=C:\Users\fernando.constantino\Documents\_BATCH\modif
for /f %%x in ('dir /b %folder%\*_off.sql') do set file=%%x&call :tratar
pause
goto :eof
:tratar
echo Archivo viejo
echo -------
type %file%
echo -------
for /f "tokens=*" %%a in (%file%) do call :wri %%a
move "%file%.bak" "%fold_dest%\%file%"
rem type "%file%.bak" > "%file%"
rem del f/q/a "%file%.bak"
echo.
echo Archivo modificado
echo -------
type %file%
echo -------
rem pause
goto :eof
:wri
set lin=%*
call set lin=%%lin:%v1-old%=%v1-new%%%
echo %lin%>>"%file%.bak"
goto :eof

He supuesto que la carpeta de destino de los archivos modificados sería C:\Users\fernando.constantino\Documents\_BATCH\modif. Obviamente puede ser cualquier otra modificando adecuadamente el bat. Pruébalo y me cuentas.

Perdón. Habría que modificar también la línea que presenta el archivo modificado, puesto que ya no está en la carpeta de trabajo. En lugar de:

type %file%

debería ser:

type %fold_dest%\%file%

Ok, el detalle seria que al momento de moverlos de carpeta y editarlos no elimina los archivos que se quedan en la carpeta anterior. Se puede modificar un del ?

Tienes razón. El bat original reescribía el archivo (y por tanto lo borraba). Como ahora se copia en otro destino no se reescribe y por tanto se mantiene el archivo original. Si quieres que se borre basta con descomentar el comando:

rem del f/q/a "%file%.bak"

y transformarlo en:

del /f/q/a "%file%"

(He puesto "/f/q/a" en vez de "f/q/a" porque me parece que eso era una errata del programa, sin influencia en el resultado, eso sí.)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas