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
@echo off
for %%a in (*.tiff) do call :Analiza %%a
GOTO:EOF
:Analiza
(analiza los ultimos tres digitos)
goto Sigue
:Sigue
if (nombre archivo) LSS (nombre archivo siguiente)
goto Carpeta
:Carpeta
mkdir (crear carpeta con el nombre del ultimo archivo)
goto Mover
:Mover
move (mover grupo de archivos a la carpeta creada)
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 !!!
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:
Citar00361570001.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í:
00361580001.tiff
00361581002.tiff
00361582003.tiff
00361583004.tiff
00361584005.tiff
00361585006.tiff
00361586007.tiff
00361587008.tiff
Y el siguiente podría ser este:
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