Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: hardmaster en 29 Junio 2016, 22:55 pm



Título: Bat para mover grupo de archivos por secuencia de numeros
Publicado por: hardmaster en 29 Junio 2016, 22:55 pm
Tengo una carpeta llamada contrato, dentro de ella tengo archivos llamados dela siguiente manera "00361570001.tiff" ..... "00361577008.tiff" . Que los mueva a una carpeta llamada como el ultimo "00361577008", son cerca de 9 millones de archivos por lo que se requiere de un bat para la tarea.

En la carpeta quedarían 8 archivos correlativos llamados :

00361570001.tiff
00361571002.tiff
00361572003.tiff
00361573004.tiff
00361574005.tiff
00361575006.tiff
00361576007.tiff
00361577008.tiff

Lo que se necesita, es que tome los últimos tres caracteres del nombre del archivo, empezando del 001 e incrementando de 1 en 1, hasta llegar nuevamente a 001 que seria otra carpeta.
Cree la carpeta con el nombre del ultimo archivo y los mueva. (Cada vez que se encuentre con un 001 cree una carpeta y mueva los archivos correlativos )
Espero se entienda la idea

Código
  1. @echo off
  2.  
  3. for %%a in (*.tiff) do call :Analiza %%a
  4. GOTO:EOF
  5.  
  6. :Analiza
  7. (analiza los ultimos tres digitos)
  8. goto Sigue
  9.  
  10. :Sigue
  11. if (nombre archivo) LSS (nombre archivo siguiente)
  12. goto Carpeta
  13.  
  14. :Carpeta
  15. mkdir (crear carpeta con el nombre del ultimo archivo)
  16. goto Mover
  17.  
  18. :Mover
  19. move (mover grupo de archivos a la carpeta creada)
  20. goto EOF



Analizar el nombre del archivo, toma los últimos 3 digitos y los compara con el siguiente archivo, si es igual crea una carpeta con el nombre del primero y mueve el archivo, si es mayor sigue con el siguiente hasta que llegue nuevamente a 001, ahí crea una carpeta con el nombre del ultimo archivo, y mueve los archivos a la carpeta creada.


Cualquier ayuda es de suma importancia. Espero me puedan ayudar. Gracias de antemano !!!


Título: Re: Bat para mover grupo de archivos por secuencia de numeros
Publicado por: Eleкtro en 30 Junio 2016, 11:24 am
En Batch puedes hacerlo, pero aparte de ser tedioso llevarlo a cabo, un script considerado eficiente que hiciese las verificaciones necesarias probablemente resultaría en un procedimiento muy, muy lento, llegando a superar sin exagerar los 60 minutos o tal vez +90-120, en caso de que realmente sean +9 millones de archivos quizás varias horas (es dificil calcularlo a ojo, es realmente muy lento), por la lógica de filtración de archivos (incrementación, substring/regex, etc). Sin embargo, en otro lenguaje sería una tarea simple y sencilla de agrupación de archivos según "X" condición.

Supongo que el lenguaje te será indiferente ya que solo pareces querer llevar a cabo una tarea administrativa con cualquier herramienta que pueda hacerlo, esté escrita en el lenguaje que esté. Pero antes de empezar y mostrarte el código necesario (en C#/VB.NET, no Batch), para asegurarnos que todo me haya quedado claro por favor muéstrame otro ejemplo real aparte de este:
Citar
Código:
00361570001.tiff
00361571002.tiff
00361572003.tiff
00361573004.tiff
00361574005.tiff
00361575006.tiff
00361576007.tiff
00361577008.tiff

Ya que, con los datos que has proporcionado, yo supongo que el siguiente grupo a mover sería algo así:
Código:
00361580001.tiff
00361581002.tiff
00361582003.tiff
00361583004.tiff
00361584005.tiff
00361585006.tiff
00361586007.tiff
00361587008.tiff

Y el siguiente podría ser este:
Código:
00361590001.tiff
00361591002.tiff
00361592003.tiff
00361593004.tiff
00361594005.tiff
00361595006.tiff
00361596007.tiff
00361597008.tiff

Es decir, que el "delimitador" virtual empezaría siempre en esta posición:

00361570001.tiff
*******1002.tiff
*******2003.tiff
*******3004.tiff
*******4005.tiff
*******5006.tiff
*******6007.tiff
*******7008.tiff

00361580001.tiff
*******1002.tiff
*******2003.tiff
*******3004.tiff
*******4005.tiff
*******5006.tiff
*******6007.tiff
*******7008.tiff

00361590001.tiff
*******1002.tiff
*******2003.tiff
*******3004.tiff
*******4005.tiff
*******5006.tiff
*******6007.tiff
*******7008.tiff


¿Todo esto que acabo de decir es correcto?.

Saludos