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:
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
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:
/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:
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
/XD
/Xn : Excluye los archivos más recientes
/xo : Excluye los archivos más recientes.
/MaxAge:
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…
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