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
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:
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:
http://ss64.com/nt/robocopy.html
Saludos
Utilizando for puedes hacer algo como lo siguiente:
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:
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