elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Script para backups incrementales.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Script para backups incrementales.  (Leído 10,429 veces)
jorma16

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[BATCH] Script para backups incrementales.
« en: 31 Julio 2012, 12:21 pm »

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.

Código:
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 Desconectado

Mensajes: 9.699



Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #1 en: 31 Julio 2012, 13:51 pm »

"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:
Código:
@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 Desconectado

Mensajes: 7


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #2 en: 31 Julio 2012, 14:05 pm »

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

Martin-Ph03n1X


Desconectado Desconectado

Mensajes: 1.059


SHOCYRIX


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #3 en: 31 Julio 2012, 14:09 pm »

jejejejeje usa sof mejor
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 Desconectado

Mensajes: 7


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #4 en: 31 Julio 2012, 21:52 pm »

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 Desconectado

Mensajes: 9.699



Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #5 en: 31 Julio 2012, 22:56 pm »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #6 en: 31 Julio 2012, 23:06 pm »

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 Desconectado

Mensajes: 1.059


SHOCYRIX


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #7 en: 1 Agosto 2012, 06:09 am »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #8 en: 2 Agosto 2012, 12:27 pm »

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 Desconectado

Mensajes: 9.699



Ver Perfil
Re: [BATCH] Script para backups incrementales.
« Respuesta #9 en: 2 Agosto 2012, 18:02 pm »

Bueno, No sé si he acertado con el código, Explico como actua:

Si es el primer backup del perfil:
Código:
AAAA/MM/DD [HORA DE MODIFICACION] (NUMERO DE BACKUP DE 7ZIP DE ESTE ARCHIVO) | NOMBRE DEL ARCHIVO

Ejemplo: ElektroH@cker.txt:
Código:
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):
    Código:
    2012/08/02 [17:45] (1) | test.txt
    2012/08/02 [17:46] (1) | test2.txt

    ElektroH@cker.txt (DESPUÉS):
    Código:
    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:
    Código
    1. @Echo OFF
    2. Title Server Backup By Elektro H@cker
    3. Setlocal enabledelayedexpansion
    4.  
    5. Set "BACKUPS=C:\Users\Administrador\Desktop\Backups"
    6. Set "PERFILES=C:\Users\Administrador\Desktop\Perfiles"
    7. Set "SevenZip=%WINDIR%\System32\7z.exe"
    8.  
    9. PUSHD "%PERFILES%"
    10. FOR /F "Tokens=*" %%# in ('DIR /B /AD') Do (
    11. PUSHD "%%#"
    12. If not exist "%BACKUPS%\%%#*7z" (Call :First_Backup "%%#") ELSE (Call :Next_Backup "%%#")
    13. )
    14. Goto :FIN
    15.  
    16. :First_Backup
    17. Echo: [+] Comprimiendo el perfil de %1 | MORE
    18. "%SevenZip%" u -mx=9 -ms=off -t7z "%BACKUPS%\%~1.1.7z" "%PERFILES%\%~1" >NUL
    19. FOR /R %%@ in (*) Do (FOR /F "tokens=1-4,* delims=/ " %%A in ('Echo %%~t@') do (Echo %%C/%%B/%%A [%%D] (1^) ^| %%~nx@ >> "%BACKUPS%\%%#.txt"))
    20. Goto:EOF
    21.  
    22. :Next_Backup
    23. For /F "tokens=2 delims=." %%_ in ('Dir /B "%BACKUPS%\%~1*7z"') do (Set /A "LastNum=%%_", "Lastnum+=1")
    24. FOR /R %%@ in (*) Do (
    25. FOR /F "tokens=1-5,* delims=/: " %%A in ('Echo %%~t@;%%@') do (
    26. Find /I "%%~nxF" "%BACKUPS%\%~1.txt" >NUL && (
    27. For /F "Tokens=1-4,* Delims=()[] " %%a in ('Type "%BACKUPS%\%~1.txt" ^| Find /I "%%~nxF"') do (
    28. set "Date=%%a"
    29. Set "Hour=%%b"
    30. IF "%%C%%B%%A%%D%%E" GTR "!DATE:/=!!Hour::=!" (
    31. Type "%BACKUPS%\%~1.txt" | FIND /I /V "%%~nxF" > "%TEMP%\%%#.txt"
    32. Echo %%C/%%B/%%A [%%D:%%E] (!LastNum!^) ^| %%~nx@ >> "%TEMP%\%%#.txt"
    33. Move /Y "%TEMP%\%%#.txt" "%Backups%\%~1.txt" >NUL
    34. )
    35. )
    36. ) || (Echo %%C/%%B/%%A [%%D:%%E] (!LastNum!^) ^| %%~nxF >> "%Backups%\%~1.txt")
    37. )
    38. )
    39. Echo: [+] Comprimiendo el perfil de %1 | MORE
    40. "%SevenZip%" u -mx=9 -ms=off -t7z "%BACKUPS%\%~1.%Lastnum%.7z" "%PERFILES%\%~1" >NUL
    41. SORT /+25 "%BACKUPS%\%~1.txt" > "%TEMP%\%~1.txt"
    42. Move /Y "%TEMP%\%~1.txt" "%BACKUPS%\%~1.txt" >NUL
    43. Goto :EOF
    44.  
    45. :FIN
    46. Echo: Ha finalizado la creacion de copias de seguridad. | MORE
    47. Timeout /T 30 || Pause



    Saludos.
« Última modificación: 2 Agosto 2012, 20:53 pm por EleKtro H@cker » En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Re: Ayuda para crear script basico en batch
Scripting
SuperDraco 1 2,568 Último mensaje 2 Junio 2011, 05:17 am
por .:UND3R:.
[BATCH] Script para ver archivos que se ejecutan al inicio
Scripting
Davidmatias321 9 6,213 Último mensaje 23 Diciembre 2011, 10:25 am
por Eleкtro
Script Para copiar archos Batch « 1 2 »
Scripting
Guille270 10 4,744 Último mensaje 2 Marzo 2015, 19:36 pm
por Guille270
Script en batch para crear respaldos.
Scripting
mis4 0 1,584 Último mensaje 21 Diciembre 2016, 21:00 pm
por mis4
[BATCH] Pequeño script para estudiarlo [ACTUALIZADO]
Scripting
.:Xx4NG3LxX:. 3 1,431 Último mensaje 22 Abril 2020, 01:47 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines