Ms-Dos - Script en .bat para copiado de archivos con ROBOCOPY

   
Vista:

Script en .bat para copiado de archivos con ROBOCOPY

Publicado por RCLop (2 intervenciones) el 29/04/2013 09:55:18
Muy buenas:

Tras muchos días en busca de un millón de información me he dado por vencido y he decidido acudir a vosotros. Os pongo en situación:

Estoy intentando crear un script para la empresa en la que trabajo, que me realice copias de seguridad en un disco externo con el comando ROBOCOPY. El caso, es que necesito que el script me lea un fichero de rutas a copiar y el contenido de estas sea copiado en el disco externo. Esta parte la he conseguido pero no como quisiera. Os pongo el código:


script.bat
-------------

F:
md F:\BACKUPS_DIARIAS\"%date:~0,2%-%date:~3,2%-%date:~6,4%"
C:
cd \
for /f "tokens=*" %%j in (rutas.txt) do (
ROBOCOPY %%j F:\BACKUPS_DIARIAS\%date:~0,2%-%date:~3,2%-%date:~6,4% /COPYALL /V /NP /E >> F:\BACKUPS_DIARIAS\log-%date:~0,2%-%date:~3,2%-%date:~6,4%.txt)
msg * Copia realizada correctamente.
exit

rutas.txt
-----------

C:\prueba1
C:\prueba2
...

El problema fundamental es que el copiado si lo realiza, pero lo que necesito es tener también el directorio padre de esta, por ejemplo: en el caso de la primera ruta "C:\prueba1" copia todo el contenido de esta pero necesito también la propia carpeta y el contenido dentro. ¿Hay alguna forma de hacer esto de forma automática?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana

Script en .bat para copiado de archivos con ROBOCOPY

Publicado por Antoni Masana (269 intervenciones) el 29/04/2013 11:12:46
Esto hace lo que deseas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
 
set aa=%date:~6,4%
set mm=%date:~3,2%
set dd=%date:~0,2%
 
set Dest=U:\BACKUPS_DIARIAS\%aa%-%mm%-%dd%
set Logs=U:\BACKUPS_DIARIAS\log-%aa%-%mm%-%dd%.txt
 
echo %Dest%
echo %Logs%
 
MD %Dest%
 
CD /D C:\
 
FOR /f "tokens=*" %%j in (rutas.txt) do (
   MD "%Dest%%%j"
   ROBOCOPY "%%j" "%Dest%%%j" /COPYALL /V /NP /E >> %Logs%
)
 
echo.
echo. **** Copia realizada correctamente ****
echo.



El fichero de rutas crealo sin la unidad de disco

rutas.txt
-----------

\prueba1
\prueba2
...

Si le pones la unidad del disco origen se debe quitar para crear la ruta de destino y eso tiene una complicación adicional pero si necesitas que tenga el C: entonces usa este formato:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
 
set aa=%date:~6,4%
set mm=%date:~3,2%
set dd=%date:~0,2%
 
set Dest=U:\BACKUPS_DIARIAS\%aa%-%mm%-%dd%
set Logs=U:\BACKUPS_DIARIAS\log-%aa%-%mm%-%dd%.txt
 
MD %Dest%
 
CD /D C:\
 
FOR /f "tokens=*" %%j in (rutas.txt) do call:Copia %%j
 
echo.
echo. **** Copia realizada correctamente ****
echo.
GOTO:EOF
 
:Copia
   SET Origen=%1
   SET Direct=%1
 
   SET DosPuntos=%Direct:~1,1%
 
   if "%DosPuntos%" == ":" SET Direct=%Direct:~2,128%
 
   MD "%Dest%%Direct%"
 
   ROBOCOPY "%Origen%" "%Dest%%Direct%" /COPYALL /V /NP /E >> %Logs%
   GOTO:EOF



Con esta ultima versión puedes poner las rutas asi:

rutas.txt
-----------

\prueba1
\prueba2
C:\prueba3
C:\Prueba4\Prueba5
...

Si deseas alguna aclaración de como funciona el BAT dimelo y te lo cuento.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script en .bat para copiado de archivos con ROBOCOPY

Publicado por RCLop (2 intervenciones) el 02/05/2013 13:03:37
Muchiiiiiiisimas gracias Antoni Masana. Me has solucionado mucho y tras ver tu código, me he dado cuenta que lo de concatenar la ruta era muy simple, pero yo no supe como dar con ello. Además de arreglarme el problema, me has ayudado abriendo mi mente ajjaj Muchas gracias de verdad.

Te pongo mi código para que lo visualices y si puedes me soluciones otro problemilla que de verdad no he conseguido como subsanarlo, por activa y por pasiva para que el script esté completo:

@echo off

echo %username% > username.txt
for /f "tokens=1" %%e in (username.txt) do set user=%%e
del username.txt
if %user%==pepito (
echo hola >deshecho.txt
del deshecho.txt
) else (
msg * Usuario incorrecto. Copia cancelada.
exit
)

hostname > namepc.txt
for /f "tokens=1" %%f in (namepc.txt) do set namepc=%%f
del namepc.txt
if %namepc%==pc1 (
echo hola >deshecho2.txt
del deshecho2.txt
) else (
msg * Servidor para la copia incorrecto. Copia cancelada.
exit
)

if not exist M: (
mail_fallo_USB.vbs
msg * Unidad M no reconocida. Copia cancelada.
exit
)

if exist M: (
fsutil fsinfo volumeinfo M: >1.txt
find "BACKUP" 1.txt >2.txt
for /f "skip=1 tokens=4" %%a in (2.txt) do set nameusb=%%a
del 1.txt 2.txt
)
set Dest=M:\BACKUPS_DIARIAS\%date:~0,2%-%date:~3,2%-%date:~6,4%
set Logs=M:\BACKUPS_DIARIAS\log-%date:~0,2%-%date:~3,2%-%date:~6,4%.txt
if %nameusb%==BACKUP (
md %Dest%
cd /D C:\
for /f "tokens=*" %%j in (rutas.txt) do (
md "%Dest%%%j"
ROBOCOPY "%%j" "%Dest%%%j" /COPYALL /V /NP /E /PURGE >> %Logs%)
mail_confirmacion_backup.vbs
msg * Copia realizada correctamente. Expulsa la unidad M por favor.
control hotplug.dll
exit
) else (
mail_fallo_USB.vbs
msg * Etiqueta Incorrecta. Introduce el HDD correcto.
exit
)

Mi otro problema radica en que al finalizar la copia con el script .bat (lanzado por una tarea programada), el dispositivo ha de expulsarse de forma segura sin la necesidad de un soft. de terceros. He probado bastantes formas y no doy con ninguna que me solucione el problema. Lo más cercano que he conseguido, es llamar a la dll "control hotplug.dll"...Que no me soluciona mucho, la verdad. También he probado con .vbs y nada, también con el comando "mountvol" pero si desmonto el volumen, luego el dispositivo ha de volverse a montar requiriendo la ID del volumen que varía según el sistema ... En fin si me puedes dar alguna pista... Muchas gracias de ante mano CRACK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script en .bat para copiado de archivos con ROBOCOPY

Publicado por DANIEL drr0872@gmail.com (2 intervenciones) el 19/11/2015 22:27:02
Camaradas, para copiar con ROBOCOPY necesito hacer un MENU.bat que me solicite el directorio origen, directorio destino, y muestre la posibilidad de enviar por correo el LOG,

Gracias...
Daniel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script en .bat para copiado de archivos con ROBOCOPY

Publicado por Black (1 intervención) el 03/11/2016 10:13:15
Estoy utilizando el scrip pero me encuentro que no puedo copiar c:\Program Files (x86)\ una carpeta de un programa, como puedo pasar la ruta para poderla copiar. gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar