Autor
|
Tema: [BATCH] Script para backups incrementales. (Leído 12,705 veces)
|
jorma16
Desconectado
Mensajes: 7
|
Hola, estoy haciendo un proyecto para mi lugar de trabajo, consiste en hacer un Script que me haga copias de seguridad de las carpetas del servidor donde guardan los usuarios toda su información, como podréis imaginar, la cantidad de información es enorme. y lo queremos hacer de la siguiente forma, a ver si me explico. - La primera vez que ejecutemos el Script me generara un .7z por cada usuario del servidor y un .txt con la siguiente información y dispuesta de la siguiente manera "nombreArchivo FechaModAAAAMMDD Backup. Es decir, si la carpeta es PEPE, me generará un PEPE.7z y un PEPE.txt con la siguiente informacion, "hola.txt 20120731 0"
- La segunda vez que se ejecute el Script, lo que tiene que hacer es, generar un .txt con la lista de los archivos en el mismo formato que el anterior, y comparar cpn PEPE.txt, los archivos nuevos serán incluidos en un nuevo .7z llamado en el caso anterior PEPE_1.7z y el PEPE.txt sera actualizado añadiendo los archivos nuevos al final del txt, apuntando que el número de backup es el 1 y editando la linea de los archivos que han sido modificados.
Por supuesto, no quiero que me hagan el programa, tengo algo hecho, he de decir, que no tengo experiencia con batch y que es el primer script que intento hacer, he conseguido que me haga un backup que me genere el txt en el formato propuesto... Pero donde empiezo a tener dudas es de cara a la siguiente ejecución del Script. Esto es lo que tengo. CLS color a cd c:\perfiles dir /ad /b > C:\backup\carpetas.txt for /f "tokens=*" %%x in (C:\backup\carpetas.txt) do ( cd "C:\perfiles\%%x" dir /tw /b> C:\backup\archivos.txt for /f "tokens=*" %%l in (C:\backup\archivos.txt) do ( echo %%~tl>> C:\backup\temporal.txt for /f "usebackq tokens=1,2,3 delims=/, " %%i in (C:\backup\temporal.txt) do ( if not exist "C:\backup\buc2.tmp" ( echo .> C:\backup\buc2.tmp echo %%l %%k%%j%%i>> C:\backup\%%x.txt ) ) del C:\backup\buc2.tmp del C:\backup\temporal.txt del C:\backup\archivos.txt del C:\backup\carpetas.txt ) cd "c:\Archivos de programa\7-Zip" 7z u "C:\backup\%%x.7z" "C:\perfiles\%%x" -ms=off -mx=9 -t7z -u- -v4000m -up0q0r2x0y2z0w2!"C:\backup\%%x.7z" ) Cómo podeis comprobar, las condiciones de los if's estan con archivos que no tienen ninguna utilidad.. Eso es porque intente hacer las condiciones con variables a 0 o a 1, pero, no me funcionaba... Era la única manera, también me esta dando problemas en el tema de hacer echos de variables. A ver si me pueden ayudar, gracias de antemano. Ante cualquier duda, pueden preguntar sin ningun problema.
|
|
« Última modificación: 31 Julio 2012, 12:50 pm por EleKtro H@cker »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
"nombreArchivo FechaModAAAAMMDD Backup" Hola, Supongo que con "Backup" te refieres a numerar el número de veces que habeis echo el backup de las carpetas? Por ejemplo, Si es el primer backup que se hace en el servidor, el número sería "1", Si es el segundo backup que haceis... el numero seria "2", etc, ¿no?. Aquí tienes la primera parte del script, Aunque ya la tenias hecha, Te la he simplificado para ir progresando yo con la segunda parte que pides, Más tarde miraré de hacerlo. EDITO: Ligeramente modificado: @Echo OFF
Set "BACKUPS=C:\Backup" Set "PERFILES=C:\Perfiles"
PUSHD "%BACKUPS%" If Not exist "*.tmp" (Fsutil file createnew "0.tmp" 0 >NUL) FOR /R %%X in (*.tmp) Do (Set /A "BackupNUM=%%~nX", "BackupNUM+=1" & Del /Q "%%X") Fsutil file createnew "%BackupNUM%.tmp" 0 >NUL
PUSHD "%PERFILES%" FOR /F "Tokens=*" %%# in ('DIR /B /AD') Do ( PUSHD "%%#" FOR /R %%@ in (*) Do (FOR /F "tokens=1,2,3,* delims=/ " %%A in ('Echo %%~t@') do (Echo %%C/%%B/%%A ^| %BackupNUM% ^| %%~nx@ >> "%BACKUPS%\%%#.txt")) CMD /C ""%PROGRAMFILES%\7-Zip\7z.exe" u "%BACKUPS%\%%#.7z" "%PERFILES%\%%#" -ms=off -mx=9 -t7z -u- -v4000m -up0q0r2x0y2z0w2!"%BACKUPS%\%%#.7z"" POPD )
Salu2
|
|
« Última modificación: 31 Julio 2012, 14:04 pm por EleKtro H@cker »
|
En línea
|
|
|
|
jorma16
Desconectado
Mensajes: 7
|
Muchisimas gracias máquina... La verdad es que me siento ahora un completo inutil... Me sacas de Java y me pierdo :S Intentaré aprender de tu código... Gracias tio A ver si conseguimos sacar la parte restante.
|
|
|
En línea
|
|
|
|
|
jorma16
Desconectado
Mensajes: 7
|
Cuanto más leo el código más me pierdo.. tengo que empollar mucho este lenguaje para entenderlo.. Muchisimas gracias por la ayuda que me estais prestando. A que te refieres con sof mejor? Yo programo los scripts en notepad++, te refieres al IDE que gasto? Si no es así, a que? Gracias por vuestra ayuda
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
A que te refieres con sof mejor? Creo que se refiere a software especializado en hacer copias de respaldo. Pero no apoyo el comentario, Cuando es tán sencillo de hacer con un script, Y además hacerlo como uno quiere (Comprimiendolo con 7z, Listando los archivos en el orden que uno quiera, Comprobando el número de copias que se ha echo ya sobre un direcotorio, etc...) esas cosas no lo hacen los programas de backup, Al menos los que yo he conocido. PD: Mañana sigo con esto. Saludos.
|
|
|
En línea
|
|
|
|
jorma16
Desconectado
Mensajes: 7
|
Creo que se refiere a software especializado en hacer copias de respaldo.
Pero no apoyo el comentario, Cuando es tán sencillo de hacer con un script, Y además hacerlo como uno quiere (Comprimiendolo con 7z, Listando los archivos en el orden que uno quiera, Comprobando el número de copias que se ha echo ya sobre un direcotorio, etc...) esas cosas no lo hacen los programas de backup, Al menos los que yo he conocido.
PD: Mañana sigo con esto.
Saludos.
Muchas gracias. Yo estoy... pasito a pasito... la verdad me parece un lenguaje interesante... De momento, mas que complicado, me parece desconocido, pero todo a su tiempo toda la ayuda es bien recibida. P.D: No tengas prisa, bastante que me ayudas
|
|
|
En línea
|
|
|
|
Martin-Ph03n1X
Desconectado
Mensajes: 1.059
SHOCYRIX
|
Creo que se refiere a software especializado en hacer copias de respaldo.
Pero no apoyo el comentario, Cuando es tán sencillo de hacer con un script, Y además hacerlo como uno quiere (Comprimiendolo con 7z, Listando los archivos en el orden que uno quiera, Comprobando el número de copias que se ha echo ya sobre un direcotorio, etc...) esas cosas no lo hacen los programas de backup, Al menos los que yo he conocido.
PD: Mañana sigo con esto.
Saludos.
SI LO SE SCRIPTS AHORITA SON PALABRAS MAYORES JEJEJE YO USO COBIANS
|
|
|
En línea
|
No eres tu trabajo, no eres cuanto tienes en el banco, no eres el auto que conduces, ni el contenido en tu billetera, no eres tus malditos cakis, eres el bailarin cantante del mundo...!!!"
|
|
|
jorma16
Desconectado
Mensajes: 7
|
Hola y buenos días. He andado muy liado y he podido progresar muy poquito en este Script, el progreso a nivel de codigo nuevo, ha sido nulo. Pero en cuanto a conocimiento mio del lenguaje ha sido mayor... Porque gracias a EleKtro H@cker he podido entender mejor el batch y a programar más limpiamente, lo cual para mi personalmente es un gran avance. Ahora tengo una horita y media libre aqui en el curro y voy a ver si puedo avanzar un poco por mi cuenta. Mi mente ha pensado en seguir el Script de la siguiente manera. Nos quedamos por la parte de adaptar el código para tener en cuenta a partir de la segunda ejecucion del Script. Habia pensado varias cosas. - Lo primero que tenemos que hacer, seria ver que archivos han sido modificados o añadidos nuevos, para esto, tenemos que mirar las fechas, tanto del .txt correspondiente, como de un DIR hecho en el momento que hacemos el backup, correjidme si me equivoco
- Una vez localizamos un archivo que tenemos que añadir o que tenemos que sobreescribir porque ha sido modificado tendremos que:
Si el archivo ha sido modificado, tendremos que sobreescribir la linea en el txt, es decir, actualizarlo y agregar ese fichero a un nuevo *.7z que se llamaria igual que el primero pero tendria al final del nombre un 2 o un 3 o cualquier numero dependiendo del backup que sea. Si el archivo es nuevo, añadirlo al nuevo .7z también y ademas añadir en el txt al final. Como idea, me parece muy bien, mi problema viene, en la implementacion. Quiero, cojer la fecha y compararla con la que tengo en el .txt y si es mayor, ese archivo tengo que ponerlo en el nuevo *.7z ¿Como lo puedo hacer? Gracias por vuestra ayuda [/list]
|
|
« Última modificación: 2 Agosto 2012, 12:31 pm por jorma16 »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Bueno, No sé si he acertado con el código, Explico como actua: Si es el primer backup del perfil: AAAA/MM/DD [HORA DE MODIFICACION] (NUMERO DE BACKUP DE 7ZIP DE ESTE ARCHIVO) | NOMBRE DEL ARCHIVO Ejemplo: ElektroH@cker.txt: 2012/08/02 [17:45] (1) | test.txt 2012/08/02 [17:46] (1) | test2.txt 2012/08/02 [17:47] (1) | test3.txt Si no es el primer backup que se realiza del perfil: - Se comprime el perfil en un nuevo 7zip sin eliminar el/los perfiles anteriores: ElektroH@cker.2.7z
- Se buscan archivos modificados en la lista de archivos (ElektroH@cker.txt), Si hay alguno modificado, Se edita la linea, Comentando que el archivo modificado se encuentra en este caso en el backup nº2.7z.
Ejemplo: ElektroH@cker.txt (ANTES):
2012/08/02 [17:45] (1) | test.txt 2012/08/02 [17:46] (1) | test2.txt ElektroH@cker.txt (DESPUÉS):
2012/08/02 [17:45] (1) | test.txt 2012/08/02 [18:03] (2) | test2.txt
Notas: Los archivos modificados/nuevos no se agregan al final de la lista, La lista se ordena por completo alfabéticamente (Me parece más efectivo a la hora de buscar un archivo). He omitido crear volumenes de los 7zip (001, 002, etc..), Es un estorbo a la hora de hacer el code, Y no se si te es realmente necesario.
ServerBackup.BAT:
Title Server Backup By Elektro H @cker Set "BACKUPS=C:\Users\Administrador\Desktop\Backups" Set "PERFILES=C:\Users\Administrador\Desktop\Perfiles" Set "SevenZip= %WINDIR%\System32\7z.exe" ) :First_Backup Echo: [+] Comprimiendo el perfil de %1 | MORE " %SevenZip%" u -mx=9 -ms=off -t7z " %BACKUPS%\ %~1.1.7z" " %PERFILES%\ %~1" >NULFOR /R %%@ in (* ) Do (FOR /F "tokens=1-4,* delims=/ " %%A in (' Echo %%~t @' ) do (Echo %%C/ %%B/ %%A [ %%D] (1 ^) ^| %%~nx @ >> " %BACKUPS%\ %%#.txt" )) :Next_Backup For /F "tokens=2 delims=." %%_ in (' Dir /B " %BACKUPS%\ %~1*7z"' ) do (Set /A "LastNum= %%_", "Lastnum+=1" ) FOR /F "tokens=1-5,* delims=/: " %%A in (' Echo %%~t @; %%@' ) do ( Find /I " %%~nxF" " %BACKUPS%\ %~1.txt" >NUL && ( For /F "Tokens=1-4,* Delims= ()[] " %%a in ('Type " %BACKUPS%\ %~1.txt" ^| Find /I " %%~nxF"' ) do ( IF " %%C%%B%%A%%D%%E" GTR " !DATE:/=!!Hour::=!" ( Type "%BACKUPS%\%~1.txt" | FIND /I /V "%%~nxF" > "%TEMP%\%%#.txt" Echo %%C/ %%B/ %%A [ %%D: %%E] (!LastNum!^) ^| %%~nx @ >> " %TEMP%\ %%#.txt" Move /Y " %TEMP%\ %%#.txt" " %Backups%\ %~1.txt" >NUL ) ) ) || (Echo %%C/ %%B/ %%A [ %%D: %%E] (!LastNum!^) ^| %%~nxF >> " %Backups%\ %~1.txt" ) ) ) Echo: [+] Comprimiendo el perfil de %1 | MORE " %SevenZip%" u -mx=9 -ms=off -t7z " %BACKUPS%\ %~1. %Lastnum%.7z" " %PERFILES%\ %~1" >NULSORT /+25 "%BACKUPS%\%~1.txt" > "%TEMP%\%~1.txt" Move /Y " %TEMP%\ %~1.txt" " %BACKUPS%\ %~1.txt" >NUL :FIN Echo: Ha finalizado la creacion de copias de seguridad. | MORE
Saludos.
|
|
« Última modificación: 2 Agosto 2012, 20:53 pm por EleKtro H@cker »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Re: Ayuda para crear script basico en batch
Scripting
|
SuperDraco
|
1
|
3,637
|
2 Junio 2011, 05:17 am
por .:UND3R:.
|
|
|
[BATCH] Script para ver archivos que se ejecutan al inicio
Scripting
|
Davidmatias321
|
9
|
7,366
|
23 Diciembre 2011, 10:25 am
por Eleкtro
|
|
|
Script Para copiar archos Batch
« 1 2 »
Scripting
|
Guille270
|
10
|
6,768
|
2 Marzo 2015, 19:36 pm
por Guille270
|
|
|
Script en batch para crear respaldos.
Scripting
|
mis4
|
0
|
2,259
|
21 Diciembre 2016, 21:00 pm
por mis4
|
|
|
[BATCH] Pequeño script para estudiarlo [ACTUALIZADO]
Scripting
|
.:Xx4NG3LxX:.
|
3
|
3,006
|
22 Abril 2020, 01:47 am
por @XSStringManolo
|
|