Ms-Dos - copiar archivos según tamaño

 
Vista:

copiar archivos según tamaño

Publicado por Alejo (11 intervenciones) el 04/11/2008 23:08:26
Buenas...! estuve buscando en el foro pero no encontré todavía la solución que busco. Quería consultar cómo hacer para copiar de un directorio con archivos *.jpg (por ejemplo) a otro directorio vacío sólo aquellos archivos que tengan más de un cierto tamaño (más de una determinada cantidad de kbytes) 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

RE:copiar archivos según tamaño

Publicado por Armando Nava  (194 intervenciones) el 05/11/2008 18:08:37
Saludos

Buscando en la ayuda del MS-DOS está lo que buscas, aunue un poquito oculto y criptico si apenas estas empezando.

Pero bueno, ¿Qué necesitamos?, una lista con los archivos *.jpg que quieres analizar, un bat que te permita analizar el tamaño de los archivos.

copia.bat crea la lista y le pasa el nombre del archivo a process.bat

process.bat recibe el nombre del archivo y utiliza la referencia de la variable para obtener el tamaño. En el ejemplo si los archivos son mayores de 1024 bytes se imprime la línea "Archivo de mas de 1Kb". en esta parte puedes colocar el copy, y especificar el número de kb que quieres. if %~z1 GTR 1024 copy %1 c:carpeta

----------------------------------
copia.bat
----------------------------------
dir /B *.jpg > lista.txt
FOR /F "tokens=1 delims=" %%a in (lista.txt) do call process.bat "%%a"

---------------------------------
process.bat
---------------------------------
echo off
if %~z1 GTR 1024 echo %1 "Archivo mas de 1Kb"

Tome parte de las contribuciones de amparitohijo, un saludo.
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

RE:copiar archivos según tamaño

Publicado por Alejo (11 intervenciones) el 10/11/2008 03:20:20
Saludos Armando. Buenísmo, me sirvió un montón. Con respecto a ésto, tengo unas dudas, ya leí toda la ayuda del FOR, pero no entendí muy bien algunas partes. Me gustaría entender un poco mejor el funcionamiento de "tokens" y "delims". Qué función cumplen? y el /F? 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

RE:copiar archivos según tamaño

Publicado por amparitohijo (94 intervenciones) el 10/11/2008 11:54:01
Hola Alejo. Te explico por encima. Si alguien se quiere currar un tutorial "entendible", que lo diga.

El comando FOR rastrea dentro de un archivo o una ubicación y almacena en variables la información contenida en cada línea, para ejecutar un comando recursivamente por cada línea. Creo que no me he explicado muy bien, pero es lo que tiene hacer un tutorial "en directo".
Con TOKENS se refiere al número de variables que va a almacenar, y DELIMS es el delimitador que va a utilizarse para separar esas variables. Me explico mejor con unos ejemplos:

Ejemplo 1
Tenemos un archivo (prueba.txt) que contiene lo siguiente:

datoA1 datoB1 datoC1 archivo1.txt
datoA2 datoB2 datoC2 archivo2.txt

Queremos almacenar las 4 columnas de información y mostrarlas en pantalla, pero en otro orden. Bien, pues en TOKENS habría que decirle que queremos almacenar los 4 datos (TOKENS=4), y en DELIMS que el delimitador es el espacio (DELIMS= )

Si queremos poner la línea así: archivo1.txt datoB1 datoC1 datoA1 habría que escribir:
FOR /F "TOKENS=4 DELIMS= " %%a in (prueba.txt) DO (ECHO %%d %%b %%c %%a)
Resultado:
archivo1.txt datoB1 datoC1 datoA1

EJEMPLO 2
Tenemos un archivo (prueba.txt) que contiene lo siguiente:
datoA1_datoB1_datoC1_archivo1.txt
datoA2_datoB2_datoC2_archivo2.txt

queremos almacenar la primera columna y la última en variables y mostrarlas en pantalla. En este caso, TOKENS=1,4 (la primera y la cuarta)
Ahora el delimitador no sería el espacio, sino guión bajo, por lo tanto DELIMS=_
Habría que escribir:
FOR /F "TOKENS=1,4 DELIMS=_" %%a in (prueba.txt) DO (ECHO %%a %%b)
Resultado:
datoA1 archivo1.txt

EJEMPLO3
Con el archivo prueba.txt:
primeralínea
segundalínea
datoA1_datoB1_datoC1_archivo1.txt
datoA2_datoB2_datoC2_archivo2.txt

queremos almacenar el nombre del archivo en una variable y cambiarlo de extensión.
En este caso, los delimitadores de palabras serían dos: el guión bajo y el punto que separa el nombre de la extensión. Además, tendríamos que "saltarnos las dos primeras líneas, ya que no contienen información que nos pueda interesar. Para esto último utilizamos SKIP. como son las 2 primeras líneas las que nos queremos saltar, pues habría que poner SKIP=2
Habría que escribir:
FOR /F "SKIP=2 TOKENS=4,5 DELIMS=._" %%a in (prueba.txt) DO (rename %%a.%%b %%a.bak)
Resultado:
rename archivo1.txt archivo1.bak
rename archivo2.txt archivo2.bak

Creo que con esto ya puedes empezar a hacer pruebas. El que quiera, puede hacer correcciones o ampliar la información. Yo lo iré recopilando, ya que una vez leído todo, se entiende bastante bien... No obstante, no dudéis en preguntar cualquier aclaración.

salu2
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

RE:copiar archivos según tamaño

Publicado por Alejo (11 intervenciones) el 10/11/2008 21:30:03
Gracias amparitohijo por tomarte el tiempo para contestar estas dudas, la verdad muy buena la explicación y muy buenos los ejemplos, ahora sí me quedó claro lo que no entendía, y además aprendí lo de SKIP, así que lo voy a poner en práctica y ver qué cosas puedo lograr. 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

RE:copiar archivos según tamaño

Publicado por Armando Nava (194 intervenciones) el 10/11/2008 21:50:50
Saludos

Como complemento al post de amparitohijo.

En la ayuda de MS-DOS puedes ver la sintaxis del FOR y otras cosillas (FOR /?). Por ejemplo puedes imprimir auna serie de numeros, tal y como se hace en cualquier lenguaje de programaciòn:

FOR /L %variable IN (inicio, paso, fin) comando DO [parámetros]

C:>more cuenta10.bat
echo off
FOR /L %%a IN (0,1,10) do echo %%a

C:>cuenta10.bat
C:>echo off
0
1
2
3
4
5
6
7
8
9
10

Segundo punto podemos acceder a mucha informaciòn de nuestros archivos de la siguiente manera:

%~I - expande %I quitando las comillas (") que pudiera haber
%~fI - expande %I a un nombre de ruta
calificado
%~dI - expande %I sólo a una letra de
unidad
%~pI - expande %I sólo a una ruta
%~nI - expande %I sólo a un nombre de
archivo
%~xI - expande %I sólo a una extensión de archivo
%~sI - ruta expandida contiene sólo nombres cortos
%~aI - expande %I a atributos de archivos
%~tI - expande %I a fecha/hora del archivo
%~zI - expande %I a tamaño del archivo
%~$PATH:I - busca los directorios de la lista de la variable de entorno de PATH y expande %I al nombre totalmente calificado
del primero que se encuentre.

Segùn mi experiencia, y tal vez lo que me falte sea algo sencillo, no he podido usarlos directamente , sino que debo invocar una llamada a otro archivo BAT, por ejemplo paa saber si un archivo es de màs de 1kb

---------------------------------
medida.bat
----------------------------------
echo off
dir /B > lista.txt
FOR /F "tokens=1 delims=" %%a in (lista.txt) do call process.bat "%%a"
pause

---------------------------------
process.bat
---------------------------------
echo %1 "MIDE" %~z1

En esta llamada a procces.bat el parametro %1 se expande con la opciòn %~z1 , como resultado tenemos la medida del archivo.

Espero te sirva.

Atte. Armando Nava
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

RE:copiar archivos según tamaño

Publicado por Armando Nava  (1 intervención) el 10/11/2008 21:55:51
Saludos


Una correciòn para saber si un archivo es de màs de 1 kb, el còdigo es el siguiente:

----------------------------------
copia.bat
----------------------------------
dir /B *.jpg > lista.txt
FOR /F "tokens=1 delims=" %%a in (lista.txt) do call process.bat "%%a"

---------------------------------
process.bat
---------------------------------
echo off
if %~z1 GTR 1024 echo %1 "Archivo mas de 1Kb"
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

RE:copiar archivos según tamaño

Publicado por Alejo (11 intervenciones) el 10/11/2008 23:22:48
Sí Armando, me sirve un montón, gracias también por tomarte el tiempo para escribirlo, leí todo y me quedó claro, está muy bueno, creo que me va a servir para hacer muchas cosas, ya que siempre estoy pensando la forma de automatizar un poco algunas tareas medio rutinarias, que de otra manera es difícil, o sino la forma de encontrarle soluciones a varios problemas (ya me sirvió en un par de ocasiones MS-DOS para encontrar soluciones sencillas a problemas molestos). Ya había estado usando el FOR /L, es muy útil el comando, lo que sí no conocía mucho es lo de expandir la variable. Gracias! alguna sugerencia sobre lo que pregunté sobre el error de inicio de sesión? Es que necesito seguir usando los comandos para practicar algunas cosas, me da error, no le encuentro solución y no quiero llegar al extremo de formatear, con todo el trabajo que implica. 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

RE:copiar archivos según tamaño

Publicado por Rojas (1 intervención) el 24/06/2013 22:58:11
Excelentisimo el tuto me a servido de un monton, para automatizar la informacion.

Solo que estoy buscando cual se ejecuta primero, bueno ya lo encontre ahora tengo que agregarle mas logica a lo que trato de hacer pero me sirvio de mucho este post.

En serio se los agradezco a todos.

Saludos
JR
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
sin imagen de perfil

No consigo copiar archivos de forma selectiva

Publicado por Mario Martinez (2 intervenciones) el 18/10/2016 23:22:04
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.
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