Bat para copiar y comprimir archivos

En ocasiones un archivo BATCH puede ser muy útil para realizar diversas tareas de forma automatizada.

 

En este caso vamos a ver cómo crear un bat para comprimir los archivos de un directorio, y algunos de los parámetros configurables.

 

 

COMENZANDO CON NUESTRO BAT:

 
El propósito de este BAT es realizar la compresión de ciertos archivos que se encuentran en cierto directorio.

Pero además de hacer la compresión de archivos por medio del fichero bat, primero deseamos que se realice una copia de los archivos a comprimir, copia sobre la cual realmente trabajaremos (por si surgen problemas, mejor trabajar sobre copias, y mantener intactos los archivos originales).

El contenido del archivo BAT podría ser el siguiente:

1
2
3
4
5
6
robocopy D:\informes\ D:\informes\comprimidos /xf *.bat
 
for %%F in (*.csv) do rar a -ad -o- -r -m5 "%%F.rar" "%%F"
 
rem después borraremos los csv del subdirectorio destino (\comprimidos)
del *.csv

 

 

El resultado de este bat sería el siguiente:

bat-copiar-comprimir-archivos

 

IMPORTANTE: En nuestro caso el script .bat debe ejecutarse desde el subdirectorio destino (en este caso el subdirectorio \comprimidos) y hemos de copiar en dicho subdirectorio, los archivos RAR.exe y rar.Ing (disponibles en el directorio de instalación de WinRar), ya que la orden FOR con el comando rar se ejecutará en el subdirectorio donde se encuentre el .bat

 
rar-exe-rar-ing
 

 

Explicación del archivo bat para copiar y comprimir archivos

 

  • Por medio del comando robocopy, copiamos los archivos de un directorio a otro para trabajar sobre las copias; copiamos todos excepto los .bat
  • Realizamos un FOR para recorrer todos los archivos con extensión .csv y realizar una compresión .rar
  • La compresión .rar añadirá el nombre del archivo a la carpeta destino, sin sobreescribir los archivos existentes, recorriendo carpetas recursivamente y estableciendo el máximo nivel de compresión .rar.
  • Finalmente borrará las copias de los archivos .csv en el subdirectorio destino.

 

 

EXPLICACIÓN AVANZADA DE LOS PASOS A SEGUIR

 

Paso 1: Copia de los archivos que posteriormente comprimiremos:

Para copiar los archivos desde el Bat, podemos utilizar XCOPY o ROBOCOPY

 

Con XCOPY:

Si utilizamos XCOPY podríamos utilizar:

1
xcopy F:\testcomprimir2 F:\testcomprimir3 /E

/E incluye copia de subdirectorios

 

Con ROBOCOPY:

Si utilizamos ROBOCOPY podríamos utilizar:

1
robocopy F:\test F:\test2 /E /MaxAge:1 /xf *.bat

 

Explicación de estos parámetros de Robocopy:

/MaxAge:2 /MaxAge: . Especifica la edad máxima de archivo (excluye los archivos más viejos que n días o fecha)

/E Copia directorios y subdirectorios, incluidos los vacíos

xf excluye la copia de archivos mencionados (en este caso todos los archivos con extensión .bat)

 

 

XCOPY (REPASO AVANZADO)

 

XCOPY origen [destino] [/A | /M] [/D[:fecha]] [/P] [/S [/E]] [/V] [/W]

[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K]

[/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]

[/EXCLUDE:archivo1[+archivo2][+archivo3]…]

 

Enlace de ayuda: Sintaxis de COPY, XCOPY y MOVE
 

 

COPY: copia archivos

XCOPY: copia archivos y el árbol de directorios.

MOVE: Mueve archivos y renombra archivos y directorios.

 

La utilización básica de XCOPY podría ser:

1
2
3
XCOPY source [destination]
 
xcopy F:\directorio1 F:\directorio2

 

Parámetros interesantes de XCOPY:

/D:m-d-y Copia archivos cambiados en la fecha proporcionada o posteriormente.

/EXCLUDE:file1[+file2][+file3]… Permite añadir una lista de archivos conteniendo ciertas cadenas. Cuando se encuentre esa cadena en un archivo, no se copiará.

/E Copia directorios y subdirectorios, incluso si están vacios.>/br>
/U Copia solo los archivos que ya existen en el directorio destino.

 

Si en la consola de comandos cmd ejecutamos: xcopy /?

veremos la ayuda del comando:

 
xcopy-help

 

 

ROBOCOPY (REPASO AVANZADO)

Copia datos de archivos.

Sintaxis básica de ROBOCOPY:

Robocopy <Source><Destination>[<File> […]] [<Options>]

Por ejemplo:

1
robocopy F:\test F:\test2 /E /xf *.bat

 

Algunas opciones de copia interesantes de ROBOCOPY:

/s Copia subdirectorios, pero no los vacíos.

/e igual que el comando anterior, pero incluye subdirectorios vacios.

/Move  Mueve los archivos y directorios y los elimina después.

 

 

Opciones de selección de archivos de ROBOCOPY:

/xf : Puede incluir caracteres comodín (* y ?)

/XD : Excluye los directorios que coinciden con la ruta y nombres especificados.

/Xn : Excluye los archivos más recientes

/xo : Excluye los archivos más recientes.

/MaxAge: . Especifica la edad máxima de archivo (excluye los archivos más viejos que n días o fecha)

 

Enlace de ayuda sobre la Sintaxis de ROBOCOPY

A continuación vemos la ayuda de Robocopy. Pero es inmensa así que solamente muestro una pequeña parte…

 

robocopy-help

 

 

Ahora que hemos comentado algunas de las opciones de XCOPY y ROBOCOPY, vamos a ver las opciones para comprimir con RAR en un BAT

 
En el BAT utilizaremos RAR para comprimir.

Para ello, como decíamos al principio del post, copiaremos el archivo Rar.exe y rar.Ing (disponibles en el directorio de instalación de Winrar) en el directorio desde el que ejecutaremos el archivo batch.

Uso: rar <orden> -<modificador 1> -<modificador N> <archivo> <ficheros>
<@lista de ficheros…> <ruta_de_extracción\>

 

Algunas órdenes RAR:

A : Agregar a un archivo

D: Eliminar un archivo

F: Actualizar los ficheros de un archivo.

M: Mover ficheros y carpetas a un archivo.

 

 

Algunos modificadores RAR:

-ad :  añadir el nombre de archivo a la carpeta destino.
-ag[formato]  : generar un nombre de archivo usando la fecha y la hora actual.
-df : eliminar los archivos tras la compresión.
-ed :  no añadir carpetas vacías.
-f : actualizar los ficheros.
-m<n> : establecer el método de compresión. m5 es la máxima compresión.
-o[+|-] : establecer modo de sobreescritura
-o- No sobrescribir los ficheros existentes
-r : recorrer carpetas recursivamente
-r- : desactivar recursión
-u : actualizar los ficheros
-x<fichero> : excluir el fichero especificado.
-ta<fecha> : procesar ficheros modificados después de la fecha especificada
-tn<tiempo> : procesar los ficheros posteriores al tiempo especificado.

 

 
Enlace útil para ver todas las opciones de sintaxis de rar
 
 

Esperamos que esta entrada para copiar y comprimir archivos por medio de un archivo .bat te sea de gran utilidad