Pequeño programa para hacer copia de seguridad

En la actualidad tengo un fichero .bat que hace una copia de seguridad de un archivo de datos en la una memoria USB. El problema es que este programilla tengo que ejecutarlo yo y siempre hace la copia con el mismo nombre.
Lo que necesito es los siguiente:
- Hacer una copia del archivo de datos "marcas.mrk", en la memoria USB.
- Que lo realice cada cierto tiempo (10 minutos), automáticamente.
- Que cada vez que lo realice, nombre el archivo de seguridad con el día y hora en la que se ha realizado.
1

1 respuesta

Respuesta
1
Te explicaré como hacerlo para el sistema operativo windows XP:
Para automatizar la ejecución del bat o el cmd cada 10 minutos
editamos 10minutos.vbs
rem 10minutos.vbs
ejecuta()
Function Espera(Segundos)
Dim hora
hora = Timer
Do While Timer - hora < Segundos
rem
Loop
ejecuta()
End Function
Function ejecuta()
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("cmd /c start /MIN cmd /c c:\scripts\copia_seg.bat ")
Espera(600)
End Function
rem fin 10minutos.vbs

El fichero se llamará copia_seg.bat , y estará en c:\scripts\
@echo off
:begin
rem damos por supuesto que se sabe en que UD se va ha hacer la copia, p.e s:
rem fecha y hora
set FECHA= %date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%

rem copiamos el fichero con nombre de fecha y hora en s:\backup\
copy c:\ruta\marcas.mrk s:\backup\%FECHA%.mrk
Lanza 10minutos.vbs y depura si funciona.
He hecho lo que me has indicado.
- Creo el archivo 10minutos.vsb
- Creo el archivo copia_seg.bat en c:/scripts/
- Ejecuto el archivo 10minutos.vsb
Problemas:
- Satura la CPU. La pone al 100% de funcionamiento y no puedo realizar más tareas, el PC se ralentiza.
- No crea la copia de seguridad.
¿Qué hacemos?
Mmmm. Efectivamente correr un VBS hace que le quite rendimiento al pc.
Vamos a buscar otra solución, desde un bat. Lo que hará será crear una tarea para todos los días (l, m,..., d) cada 10 minutos
--- inicio 10minutos.bat ----
@echo off
at 00:00 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 00:10 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 00:20 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 00:30 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 00:40 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 00:50 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 01:00 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 01:10 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 01:20 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
rem .... termina de rellenar lo que te falte :-)
rem se podria implementar con un for, pero me coger con prisas
at 23:40 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 23:50 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
---- fin 10minutos.bat ----
Este fichero solo lo deberás ejecutar una vez y se crearán las tareas que lanzan todos los días en intervalos de 10 minutos el fichero c:\scripts\copia_seg.bat.
Prueba 1º si te funciona copia_seg.bat, que no he tenido tiempo de depurarlo y me comentas
saludos
el copia_seg.bat no funciona. No crea ningún nuevo fichero.
@echo off
:Begin
rem damos por supuesto que se sabe en que UD se va ha hacer la copia, p.e s:
rem fecha y hora
set FECHA= %date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
rem copiamos el fichero con nombre de fecha y hora en s:\backup\
if not exist s:\backup md s:\backup
copy c:\ruta\marcas.mrk s:\backup\%FECHA%.mrk
----------
Ten encuenta que debe de existir c:\ruta\marcas.mrk , personaliza para la carpeta donde tengas ese fichero. Y si no existe s:\backup, te he añadido una linea que crea el directorio. Pero también ten encuenta que unidad es el pendrive, si no es s:, cambialo.
Puedes añadir pause al final del fichero y quitar el @echo off para ver que es lo que te falla.
Lo he probado y me funciona, si desactivo el @echo off, este es el resultado del script:
---------
C:\>rem damos por supuesto que se sabe en que UD se va ha hacer la copia, p.e s:
C:\>rem fecha y hora
C:\>set FECHA= 12/08/2008_11:16:43,53
C:\>set FECHA= 12082008_11:16:43,53
C:\>set FECHA=12082008_11:16:43,53
C:\>set FECHA=12082008_111643,53
C:\>set FECHA=12082008_11164353
C:\>rem copiamos el fichero con nombre de fecha y hora en d:\backup\
C:\>if not exist d:\backup md d:\backup
C:\>copy c:\ruta\marcas.mrk d:\backup\12082008_11164353.mrk
1 archivos copiados.
C:\>pause
Presione una tecla para continuar . . .
Lo he modificado tal que así, para hacer la prueba:
@echo off
:begin
rem damos por supuesto que se sabe en que UD se va ha hacer la copia, p.e c:
rem fecha y hora
set FECHA= %date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
rem copiamos el fichero con nombre de fecha y hora en c:\backup\
if not exist c:\backup md c:\backup
copy c:\ruta\marcas.mrk c:\backup\%FECHA%.mrk
Crea el directorio c:\backup, pero no copia el marcas.mrk en el directorio.
Para hacer una prueba he modificado lo siguiente:
copy c:\ruta\marcas.mrk c:\backup\FECHA.mrk
y crea perfectamente una copia del marcas.mrk en FECHA.mrk
Si quitas los signos %, de la variable fecha no consigues que te lo copie en el formato
de fecha_hora, p.e: 12082008_11164353. Mrk
12/08/2008 11:16:43:53 (hora:minutos:sg:fración de sg).
¿Has mirado en el directorio c:\backup\ si hay algún fichero más?
Ejecuta solo lo siguiente en un fichero prueba.bat
-------
set FECHA= %date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
Echo %FECHA%
Pause
-------
Y dime que te sale por pantalla (puedes dar al botón derecho en la parte superior de la pantalla > editar > marcar > seleccionas lo que te salga en la pantalla y dándole intro lo copias en el portapapeles
Ya, ya se que sin el % no sale en formato fecha_hora, lo hacía para que vieras que si fuera un archivo nombrado de una manera habitual lo copia sin problema, pero en ese formato no lo copia.
No, no crea ningún otro archivo en el directorio c:\backup\
Una vez ejecutado lo que me has mandano en el prueba.bat, sale lo siguiente:
C:\scripts>set FECHA= 12/08/2008_13:39:54,71
C:\scripts>set FECHA= 12082008_13:39:54,71
C:\scripts>set FECHA=12082008_13:39:54,71
C:\scripts>set FECHA=12082008_133954,71
C:\scripts>set FECHA=12082008_13395471
C:\scripts>echo 12082008_13395471
12082008_13395471
C:\scripts>PAUSE
Presione una tecla para continuar . . .
Te debería funcionar. Lo he probado y a mi me funciona con XP. ¿Qué windows usas?.
Haz lo mismo, con copia_seg.bat (quítale la @echo off y añade al final un pause) y verás lo que haces, si no sabes donde está el fallo, pégalo en un nuevo post y te digo
También tengo el xp.
Esto es lo que hay en el copia_seg.bat :
:begin
rem damos por supuesto que se sabe en que UD se va ha hacer la copia, p.e s:
rem fecha y hora
set FECHA= %date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
rem copiamos el fichero con nombre de fecha y hora en c:\backup\
if not exist c:\backup md c:\backup
copy c:\ruta\marcas.mrk c:\backup\%FECHA%.mrk
pause
Esto es lo que sale:
C:\scripts>rem damos por supuesto que se sabe en que UD se va ha hacer la copia,
p.e s:
C:\scripts>rem fecha y hora
C:\scripts>set FECHA= 12/08/2008_13:52:16,71
C:\scripts>set FECHA= 12082008_13:52:16,71
C:\scripts>set FECHA=12082008_13:52:16,71
C:\scripts>set FECHA=12082008_135216,71
C:\scripts>set FECHA=12082008_13521671
C:\scripts>rem copiamos el fichero con nombre de fecha y hora en c:\backup\
C:\scripts>if not exist c:\backup md c:\backup
C:\scripts>copy c:\ruta\marcas.mrk c:\backup\12082008_13521671 .mrk
La sintaxis del comando no es correcta.
C:\scripts>pause
Presione una tecla para continuar . . .
Ok, ya se donde está el fallo. En la linea
copy c:\ruta\marcas.mrk c:\backup\12082008_13521671 .mrk
Antes del punto de la extensión mrk hay un espacio en blanco, que a mi no me sale con mi código.
Revisa que sea exactamente :
copy c:\ruta\marcas.mrk d:\backup\12082008_11164353.mrk
Si hace falta reescribe el código a mano para controlar posible fallos de espacios en blanco que no estás controlando, edítalo y usa el notepad
Saludos
No entiendo lo que me quieres decir.
En el copia_seg.bat no hay la linea:
copy c:\ruta\marcas.mrk c:\backup\12082008_13521671 .mrk
lo que hay es:
copy c:\ruta\marcas.mrk c:\backup\%FECHA%.mrk
¿Dónde modifico?
Efectivamente, pero te sale al ejecutarlo un espacio en blanco entre el resultado de la variable %fecha% y la extensión .mrk . y te da un error al copiar el fichero.
Por lo que debesde editar el fichero con el notepad y depurarlo.
fijate en la linea 3 de los set : set FECHA=%FECHA:ESPACIO_EN_BLANCO=%
Debe de haber un espacio en blanco que tienes que respetar. ...
Ya lo tienes hecho, solo tienes que depurarlo en función del error que te da. Que es el espacio en blanco antes del punto y de la extensión ( .mrk ).
Por cierto, como veo que no das en el clavo, enviame tu fichero a mi email [email protected], pon en el asunto TODOEXPERTOS, te lo reenviaré depurado
OK. El copia_seg.bat funciona perfectamente.
El que no funciona es el 10minutos.bat
Lo ejecuto y crea los trabajos, pero después estos no se ejecutan.
¿A ti te funciona?
at 21:10 /interactive EVERY:l,m,x,j,v,s,d "cmd /K c:\scripts\copia_seg.bat"

Prueba poniendo entre comillas el trabajo a lanzar. Prueba también solo con :
At 21:10 /interactive EVERY:l, m, x, j, v, s, d c:\scripts\copia_seg.bat
Tambien puede que en lugar de l, m,..., v tengas que pone m, t, w, th, f, s, su (inglés)
Si usas vista tendrás que usar el comando schtasks . desde una ventana del dos pon schtasks /? y te indica la sintaxis.
Venga, que ya casi lo tienes.
He probado con lo siguiente:
at 23:30 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\copia_seg.bat
at 23:31 /interactive EVERY:l,m,x,j,v,s,d cmd /K c:\scripts\"copia_seg.bat"
at 23:32 /interactive EVERY:m,t,w,th,f,s,su cmd /K c:\scripts\copia_seg.bat
at 23:33 /interactive EVERY:l,m,x,j,v,s,d c:\scripts\copia_seg.bat
at 23:34 c:\scripts\copia_seg.bat
y solo ha realizado la copia de las 23:34
Jo, perdona, pero trabajo con linux (ubuntu) y lo referente a windows lo tengo que hacer de memoria.
Tenia un error de sintaxis, en el comando at hay que poner / antes del every:
at 21:30 /interactive /every:l,m,x,j,v,s,d c:\scripts\copia_seg.bat
o
at 21:30 /interactive /every:l,m,x,j,v,s,d "cmd /K c:\scripts\copia_seg.bat"
OK. Ya funciona bien.
Para finalizar, ¿qué podríamos hacer para que no se visualizara la ventana de MSDOS, cada vez que realiza una copia?
"cmd /K start /MIN c:\scripts\copia_seg.bat"
¿Y para desactivar el programa 10minutos.bat?, es decir, para que deje de hacer las copias.
Inicio > ejecutar > cmd
c:\...\> at
Te mostraría los trabajos que tienes programados
Estado ID Día Hora Línea de comando
-------------------------------------------------------------------------------
1 Hoy 10:00 "cmd /k start /min c:\loquesea.cmd"
2 Hoy 10:01 dir
3 Hoy 10:02 c:\otracosa.bat
Para borrarlos todos:
at * /delete /yes
El /yes es para no pedir confirmación
Saludos
postdata: desde ventana del dos haz at /?
Por cierto, si quitas el /interactive, creo que no saldría la ventana del dos. Pruébalo.
Te agradezco mucho tu ayuda.
Me has sido de mucha utilidad, pues no dispongo de los conocimientos necesarios para realizar el programa que me has diseñado y me hacía mucha falta.
Gracias, también por ser rapido y ágil en las respuestas y por soportar mis continuas preguntas.
Te he incluido en mis lista de favoritos.
Muchas gracias por todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas