[SOLUCIONADO] No consigo copiar archivos segun su tamaño en .bat

Iniciado por mario290386, Octubre 18, 2016, 06:59:11 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 18, 2016, 06:59:11 PM Ultima modificación: Octubre 21, 2016, 08:01:44 PM por rollth
Hola buenas, tengo un problema que espero me pueda ayudar algún entendido del tema.

Resulta que por el trabajo que desempeño a diario necesito estar continuamente copiando información de bases de datos  que se encuentra almacenada en varios ordenadores y las paso a diferentes USB o unidades extraíbles,  por lo que estoy usando la siguiente rutina para hacer el proceso más cómodo, y la verdad que funciona muy bien:

IF NOT EXIST ".\cosas\"%USERNAME% MD ".\cosas\"%USERNAME%
cd ".\cosas\"%USERNAME%

for /R %USERPROFILE%\Pictures\ %%x in (*.accdb) do copy "%%x" "%NOMBRE%BASE-DATOS"

Pues bien, el  problema que tengo es que necesito sólo copiar algunos archivos que no superen un cierto tamaño, por ejemplo solo necesito copiar que se copien los archivos que pesen menos de 200 mb.

He visto por internet algunos ejemplos de cómo se hace el comando, pero no consigo insertarlo en la rutina mia anterior, por ejemplo,  he intentado utilizar esto:

for /R %USERPROFILE%\Pictures\ %%x in (*.accdb) do copy "%%x" "%NOMBRE%BASE-DATOS"/MAX:1000

Pero no me funciona, no sé si hay que colocar el parametro "MAX:" en otro lugar o es que no se hace de esta manera, pero yo necesito que en el script que utilizo pueda insertar ese parámetro de alguna manera.

Espero que alguien me pueda ayudar porque esto me lleva de cabeza ya bastante tiempo y es un engorro que se me copien todos los archivos y no poder separarlos por fecha o por tamaño.
Un saludo y gracias

Puedes probar con un condicional y comparar si el tamaño del archivo es mayor a tal cantidad, para eso puedes usar GTR tamaño y ya en el condicional en caso de que sea cierto hacer que se copie :D
RollthBuen hacker mejor No tienes permitido ver enlaces. Registrate o Entra a tu cuenta/No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Octubre 18, 2016, 10:36:40 PM #2 Ultima modificación: Octubre 19, 2016, 01:29:53 AM por grep
La opción /MAX: pertenece al comando robocopy el cual se encuentra incluido a partir de Windows 7 (para Windows XP necesitas Resource Kit).

Al utilizar robocopy no veo necesario utilizar el comando for el mismo programa itera sobre cada archivo del directorio fuente, realiza las comprobaciones necesarias en cada uno y, si el archivo cumple con las condiciones, se copia al directorio destino (si el directorio destino no existe, robocopy lo crea automáticamente).

Ejemplo:

Código: dos

SET "NOMBRE-BASE-DATOS=MyAccessDB"

SET "SourceDir=%USERPROFILE%\Pictures"         %=Directorio fuente=%
SET "TargetDir=%NOMBRE-BASE-DATOS%"            %=Directorio destino=%
SET "Files=*.accdb"                                %=Archivos a copiar=%
SET Maxsize=200                                %=Archivos menores a 200MB=%

IF NOT EXIST ".\cosas\%USERNAME%" MD ".\cosas\%USERNAME%"
CD ".\cosas\%USERNAME%"

SET /A Maxsize *= 1024 * 1024
SET /A Maxsize -= 1

robocopy "%SourceDir%" "%TargetDir%" %Files% /XF "%~f0" /MAX:"%Maxsize%"


Fuente:
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Saludos

Octubre 18, 2016, 11:04:39 PM #3 Ultima modificación: Octubre 19, 2016, 01:24:41 AM por grep
Utilizando for puedes hacer algo como lo siguiente:

Código: dos

SET "NOMBRE-BASE-DATOS=MyAccessDB"

SET "SourceDir=%USERPROFILE%\Pictures"                            %=Directorio fuente=%
SET "TargetDir=.\cosas\%USERNAME%\%NOMBRE_BASE_DATOS%"            %=Directorio destino=%
SET "Files=*.accdb"                                               %=Archivos a copiar=%
SET Maxsize=200                                                   %=Archivos menores a 200MB=%

IF NOT EXIST "%TargetDir%" MD "%TargetDir%"

SET /A Maxsize *= 1024 * 1024

FOR /R "%SourceDir%" %%G IN ("%Files%") DO IF %%~zG LSS %Maxsize% COPY "%%G" "%TargetDir%\"


Aquí la operación importante es:

Código: dos
IF %%~zG LSS %Maxsize%


Si el tamaño %%~zG del archivo %%G es inferior a %Maxsize%, entonces se realiza la copia. Si quieres que el tamaño del archivo sea menor o igual al tamaño especificado, entonces utiliza LEQ (Less than or Equal) en lugar de LSS.

Saludos