consulta-Que reconosca si hay carpetas para continuar o no

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

consulta-Que reconosca si hay carpetas para continuar o no

Mensaje por diego999 »

Hola,mi primer post,aqui va:
Utilizo un programa para abrir muchas imagenes que se encuentran dentro de subcarpetas que a su vez estan en carpetas,que a su ves pertenecen a una carpeta principal,asi:

CARPETA MADRE
Carpeta A
subcarpeta A1
imagen.jpg
subcarpeta A2
imagen.jpg
Carpeta B
subcarpeta B1
imagen.jpg
subcarpeta B2
imagen.jpg
subcarpeta B3
imagen.jpg
subcarpeta B4
imagen.jpg
subcarpeta B5
imagen.jpg
Carpeta C
subcarpeta C1
imagen.jpg

Necesito automatizar un proceso por el cual este programa que utilizo,que no es de windows, este abriendo cada subcarpeta A1,A2,B1,B2,B3,B4,B5,C1,etc,pero que cuando este haciendo esto por ejemplo despues de la subcarpeta A2 ,reconosca que no hay una subcarpeta A3 y entonces continue en subcarpeta B1,y despues reconosca que no hay subcarpeta B6,y continue en subcarpeta C1,en resumen,, diferenciar si dentro de las carpetas A,B,C,etc hay subcarpetas para seguir el proceso o no.A todo esto decir que yo desconosco cuantas subcarpetas hay en Carpetas A,B,C,etc,es decir, como son muchas carpetas,no quiero tener que escribir el nombre de cada una en el script,sino que el programa se de cuenta por algun patron o algo que debe continuar o no.

Lo que he averiguado hasta ahora,(gracias renzoARG),es que debo usar _FileListToArrayRec o _FileListToArray ,pero recien estoy empezando con autoit,asi que conosco lo basico,y ya realize un script pero muy simple con SEND, mouseclick,pero estoy aprendiendo.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

¿no hay subcarpetas en subcarpeta A1?

podrias hacer algo asi:

Código: Seleccionar todo

 #include <File.au3>
  #include <Array.au3>

Global $CarpetaMadre="Aqui to directorio"

Local $aNCarpetas=_FileListToArray($CarpetaMadre,"*.")

_ArrayDisplay($aNCarpetas)

Local $aSubCarpetas=0
Local $aSubCarpetas2=0
For $i=1 to $aNCarpetas[0]
$aSubCarpetas=_FileListToArray($CarpetaMadre & "\" & $aNCarpetas[$i])
_ArrayDisplay($aSubCarpetas)
For $x=1 to $aSubCarpetas[0]
	$aSubCarpetas2=_FileListToArray($CarpetaMadre & "\" & $aNCarpetas[$i] & "\" & $aSubCarpetas[$x])
	_ArrayDisplay($aSubCarpetas2)
	Next
Next
Saludos
  • ............................................Imagen
    ......................................Imagen
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: consulta-Que reconozca si hay carpetas para continuar o

Mensaje por PDF »

Hola..

Realmente las UDF han facilitado mucha esta tarea, con _FileListToArrayRec lo haces con unas cuantas lineas y utilizando includes, lo que si se quiere hacer sin usar los includes requeriría bucles, usar FileFindFile.., etc..

Deberías mirar los ejemplos, aquí uno sencillo.

Código: Seleccionar todo

#include <Array.au3>
#include <File.au3>
$sDirectorio="c:\Images"
Local $aArray = _FileListToArrayRec($sDirectorio, "*.jpg", 1,$FLTAR_RECUR)
_ArrayDisplay($aArray)
Saludos..
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por diego999 »

Dany escribió:¿no hay subcarpetas en subcarpeta A1?

podrias hacer algo asi:

Código: Seleccionar todo

 #include <File.au3>
  #include <Array.au3>

Global $CarpetaMadre="Aqui to directorio"

Local $aNCarpetas=_FileListToArray($CarpetaMadre,"*.")

_ArrayDisplay($aNCarpetas)

Local $aSubCarpetas=0
Local $aSubCarpetas2=0
For $i=1 to $aNCarpetas[0]
$aSubCarpetas=_FileListToArray($CarpetaMadre & "\" & $aNCarpetas[$i])
_ArrayDisplay($aSubCarpetas)
For $x=1 to $aSubCarpetas[0]
	$aSubCarpetas2=_FileListToArray($CarpetaMadre & "\" & $aNCarpetas[$i] & "\" & $aSubCarpetas[$x])
	_ArrayDisplay($aSubCarpetas2)
	Next
Next
Saludos
No hay subcarpetas en subcarpeta A1 y en ninguna otra subcarpeta,solo hay archivos y de esos archivos en cada subcarpeta me intereza uno solo, que es una imagen,que tiene el mismo nombre en todas las subcarpetas,pero no es la misma imagen,y es la que finalmente el programa abre,le hace lo que tiene que hacerle ,ciera esa imagen y continua con otra imagen.
Cada vez me gusta mas esto de programar... :smt024 :smt045 ,saludos
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

Prueba el código. ya luego solo falta agregar una repetición mas dentro de las subcarpetas y lanzar las imágenes.


saludos
  • ............................................Imagen
    ......................................Imagen
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por diego999 »

Dany escribió:Prueba el código. ya luego solo falta agregar una repetición mas dentro de las subcarpetas y lanzar las imágenes.


saludos
Me da un error en la linea 12 asi:

For $i=1 to $aNCarpetas[0]
For $i=1 to $aNCarpetas^ERROR

Error:Subscript used o non-accessible variable
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconozca si hay carpetas para continuar o

Mensaje por diego999 »

PDF escribió:Hola..

Realmente las UDF han facilitado mucha esta tarea, con _FileListToArrayRec lo haces con unas cuantas lineas y utilizando includes, lo que si se quiere hacer sin usar los includes requeriría bucles, usar FileFindFile.., etc..

Deberías mirar los ejemplos, aquí uno sencillo.

Código: Seleccionar todo

#include <Array.au3>
#include <File.au3>
$sDirectorio="c:\Images"
Local $aArray = _FileListToArrayRec($sDirectorio, "*.jpg", 1,$FLTAR_RECUR)
_ArrayDisplay($aArray)
Saludos..
Con esto ya tengo en parte lo que necesito,coloque la carpeta madre en $sDirectorio="c:\Images"y me aparecio una lista de todas las imagenes que estan en las subcarpetas,ahora solo faltaria como hacer para que el programa que utilizo para abrir esas imagenes,vaya tomando cada imagen desde la fila [1] hasta la ultima,porque ya tengo hecho el script para cuando la imagen este dentro del programa,entonces como puedo llamarlas una por una? Saludos
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

Si el programa con el que las abres esta por defecto. entonces usa algo asi.

Código: Seleccionar todo

For $i=1 to $aArray[0]
ShellExecute($sDirectorio & "\" & $aArray[$i])
Next
sino esta por defecto. usa algo así.

Código: Seleccionar todo

For $i=1 to $aArray[0]
ShellExecute("rutacompletadelprogramayelnombredelprograma",$sDirectorio & "\" & $aArray[$i])
Next

saludos
  • ............................................Imagen
    ......................................Imagen
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por diego999 »

Dany escribió:Si el programa con el que las abres esta por defecto. entonces usa algo asi.

Código: Seleccionar todo

For $i=1 to $aArray[0]
ShellExecute($sDirectorio & "\" & $aArray[$i])
Next
sino esta por defecto. usa algo así.

Código: Seleccionar todo

For $i=1 to $aArray[0]
ShellExecute("rutacompletadelprogramayelnombredelprograma",$sDirectorio & "\" & $aArray[$i])
Next

saludos
Bueno,creo que va a quedar asi;aunque hay algo que quiero saber como funciona,en los comentarios me explico:

#include <Array.au3>
#include <File.au3>

$sDirectorio="d:\Mis Documentos transferidos desde C\Carpeta de Prueba"; guardamos temporalmente esta carpeta en la variable $sDirectorio

Local $aArray = _FileListToArrayRec($sDirectorio, "*.jpg", 1,$FLTAR_RECUR);Hacemos una lista de solo los archivos jpg que estan en la carpeta "carpeta de prueba",a nivel de todas las subcarpetas,y que devuelva solo los archivos

_ArrayDisplay($aArray);aca se muestran

For $i=1 to $aArray[0];Aqui es donde quiero saber que hace,va de la celda 1 a la celda [0],y en consecuencia va por la imagen en la celda [1] ?, o va desde la 1 a 0,pero como la celda [0] muestra la cantidad total de imagenes,en consecuencia va por todas?como es..

ShellExecute($sDirectorio & "\" & $aArray[$i]);Y aqui ejecuta una por una o todas juntas? ,por el Next asumo que es una por una,pero por las dudas pregunto
Next

;Aqui abajo la imagen ya esta abierta en el programa
MouseClick("left",1772,304,1)
Sleep(250)
MouseClick("left",522,294,1)
MouseClick("left",560,100,2)
Send("7",1)
Send("0",1)
Send("{ENTER}")
Sleep(450)
MouseMove(1324,1013)
MouseClick("left",1324,1013,1)
Sleep(3500);retardo de 3,5 segundos para que termine de procesar
MouseMove(1698,1103)
MouseClick("left",1698,1103,1);guarda
Sleep(350)
MouseClick("left",1835,1114,1);cierra la imagen y aca termina de procesar la primera imagen

Y el Next va aqui al final despues de MouseClick("left",1835,1114,1) o esta bien como lo deje?

Saludos..
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

_FileListToArrayRec retora un array comenzando en indice 0.

resulta que el array[0]= contiene la cantidad de elementos en el array.

entonces haces la repeticion for

Código: Seleccionar todo

for $i=1 to array[0] ;para i=1 hasta array[0] (que contiene la cantidad de elementos)
ShellExecute($sDirectorio & "\" & $aArray[$i]);aqui abres la imagen correspodiente al indice del array con el programa predeterminado

;aqui el codigo para atumatizar 
MouseClick("left",1772,304,1)
Sleep(250)
MouseClick("left",522,294,1)
MouseClick("left",560,100,2)
Send("7",1)
Send("0",1)
Send("{ENTER}")
Sleep(450)
MouseMove(1324,1013)
MouseClick("left",1324,1013,1)
Sleep(3500);retardo de 3,5 segundos para que termine de procesar
MouseMove(1698,1103)
MouseClick("left",1698,1103,1);guarda
Sleep(350)
MouseClick("left",1835,1114,1);cierra la imagen y aca termina de procesar la primera imagen

Next ;volvemos al comienzo del for hasta que se termine el array
saludos
  • ............................................Imagen
    ......................................Imagen
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por diego999 »

Dany escribió:_FileListToArrayRec retora un array comenzando en indice 0.

resulta que el array[0]= contiene la cantidad de elementos en el array.

entonces haces la repeticion for

Código: Seleccionar todo

for $i=1 to array[0] ;para i=1 hasta array[0] (que contiene la cantidad de elementos)
ShellExecute($sDirectorio & "\" & $aArray[$i]);aqui abres la imagen correspodiente al indice del array con el programa predeterminado

;aqui el codigo para atumatizar 
MouseClick("left",1772,304,1)
Sleep(250)
MouseClick("left",522,294,1)
MouseClick("left",560,100,2)
Send("7",1)
Send("0",1)
Send("{ENTER}")
Sleep(450)
MouseMove(1324,1013)
MouseClick("left",1324,1013,1)
Sleep(3500);retardo de 3,5 segundos para que termine de procesar
MouseMove(1698,1103)
MouseClick("left",1698,1103,1);guarda
Sleep(350)
MouseClick("left",1835,1114,1);cierra la imagen y aca termina de procesar la primera imagen

Next ;volvemos al comienzo del for hasta que se termine el array
saludos
¡¡¡¡FUNCIONA¡¡¡¡ Solo me falta una cosa,al principio tengo que cerrar la ventana del ArrayDisplay para que comienze,y no he podido con winclose,y otros,ultima ayuda,pero queda asi:

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d

#include <Array.au3>
#include <File.au3>
$sDirectorio="d:\Mis Documentos transferidos desde C\Carpeta de Prueba "; guardamos temporalmente esta carpeta en la variable $sDirectorio
Local $aArray = _FileListToArrayRec($sDirectorio, "*.jpg", 1,$FLTAR_RECUR);Hacemos una lista de solo los archivos jpg que estan en la carpeta
_ArrayDisplay($aArray)


For $i=1 to $aArray[0];para i=1 hasta array[0] (que contiene la cantidad de elementos)
Sleep(550)
ShellExecute($sDirectorio & "\" & $aArray[$i]);aqui abres la imagen correspondiente al indice del array con el programa predeterminado
WinWaitActive("nombre.jpg","");esperamos se active la ventana de edicion
Sleep(1250)
Send("{DOWN 1}")
Sleep(125)
Send("{ENTER}")
Sleep(1250)
MouseClick("left",1772,304,1)
Sleep(250)
MouseClick("left",522,294,1)
MouseClick("left",560,100,2)
Send("7",1)
Send("0",1)
Send("{ENTER}");Fija en 70 la herramienta
Sleep(450)
MouseMove(1324,1013)
MouseClick("left",1324,1013,1)
Sleep(3500);retardo de 3,5 segundos para que termine de procesar
MouseMove(1698,1103)
MouseClick("left",1698,1103,1);guarda
Sleep(350)
MouseClick("left",1835,1114,1);cierra y aca termina la primera imagen
Sleep(1000)

Next;volvemos al comienzo del for hasta que se termine el array

Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script es "Pausado"',0,0)
WEnd
ToolTip("")
EndFunc

Func Terminate()
Exit 0
EndFunc

Func ShowMessage()
MsgBox(4096,"","Esto es un mensaje.")
EndFunc

Y lo puedo pausar y cancelar cuando quiero,una vez reinicie la pc para que no siguiera, :smt042 ,pero descubri la pausa.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

Solo quita el arraydisplay si no quieres que se muestre. solo es para ver el array. no es necesario.

Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
diego999
Mensajes: 15
Registrado: 07 Sep 2014, 11:23

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por diego999 »

Dany,si me dijeron que el array es solo para mostrar,no hace falta en este caso,el script esta trabajando muy bien,con algunos pulidos por aqui y por alla,ahora voy a tratar de que sea un poco mas rapido,aunque esto este limitado por el programa que utilizo,pero va todo bien,saludos
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: consulta-Que reconosca si hay carpetas para continuar o

Mensaje por Dany »

depende de lo que hagas con el programa se podría hacer en Autoit así sera mas rápido.


saludos
  • ............................................Imagen
    ......................................Imagen
Responder