se puede hacer en autoit
se puede hacer en autoit
buen dia
moachos espero esten bien
les pregunto una cosa a ver si se puede
tengo una carpeta que dentro tiene unas subcarpetas y cada una tiene un archivos la estructura es la sgte :
folder
-- > subfolder 1
-->subfoler2
--> archivo_bodega5.pdf
lo que yo quero es lo sgte :
todo el tiempo estare creando arvhiso con el nombre
archivo_bodega5.pdf
el detalle esque sera con distintas termianciones osea
archivo_bodega_c6.pdf
archivo_bodega_d7.pdf
archivo_bodega_x70.pdf
y aqui viene la pregnuta
se puede crear con autoit un scrip que me cree carpetas con el nombre del archivo pero solo con determinada parte de este ejemplo :
si tengo los archivos
archivo_bodega_s6.pdf
archivo_bodega_F7.pdf
archivo_bodega_O70.pdf
el sistema me cree la carpetas
bodega_s6
bodega_F7
bodega_O70
me pueden indicar por si se puede o no y si hay alguna intruccion para yo empezar a mirar codigos
gracias a gna08 conozco la que la dircreate pude usar fechas y datos peor lo que yo neceisto ahroa es que coja parte dle bombre dle archivo para crear el folder cosa que debe ser de forma automatizada ya que son 10 a 15 archivos de estos por dia y con distintas terminacioes ,c70,b7,g5 etc etc
de antemano mil gracias
ps
me cruza por la cabeza , tal vez un filelistoArray pero como solo necesito una parte es donde me frena
moachos espero esten bien
les pregunto una cosa a ver si se puede
tengo una carpeta que dentro tiene unas subcarpetas y cada una tiene un archivos la estructura es la sgte :
folder
-- > subfolder 1
-->subfoler2
--> archivo_bodega5.pdf
lo que yo quero es lo sgte :
todo el tiempo estare creando arvhiso con el nombre
archivo_bodega5.pdf
el detalle esque sera con distintas termianciones osea
archivo_bodega_c6.pdf
archivo_bodega_d7.pdf
archivo_bodega_x70.pdf
y aqui viene la pregnuta
se puede crear con autoit un scrip que me cree carpetas con el nombre del archivo pero solo con determinada parte de este ejemplo :
si tengo los archivos
archivo_bodega_s6.pdf
archivo_bodega_F7.pdf
archivo_bodega_O70.pdf
el sistema me cree la carpetas
bodega_s6
bodega_F7
bodega_O70
me pueden indicar por si se puede o no y si hay alguna intruccion para yo empezar a mirar codigos
gracias a gna08 conozco la que la dircreate pude usar fechas y datos peor lo que yo neceisto ahroa es que coja parte dle bombre dle archivo para crear el folder cosa que debe ser de forma automatizada ya que son 10 a 15 archivos de estos por dia y con distintas terminacioes ,c70,b7,g5 etc etc
de antemano mil gracias
ps
me cruza por la cabeza , tal vez un filelistoArray pero como solo necesito una parte es donde me frena
- XPyro
- Profesional del Autoit
- Mensajes: 542
- Registrado: 04 Mar 2007, 10:12
- Ubicación: México
- Contactar:
Re: se puede hacer en autoit
Creo que te puede ser útil el código de Rupert.25 y otro que yo realice, es para crear portables pero te puede ser de utilidad a la hora de buscar carpetas y archivos.
Una parte del código que te puede interesar del programa que realice es esta donde busca archivos y carpetas:
Puedes ver los códigos completos en:
http://www.emesn.com/autoitforum/viewto ... hilit=file
http://www.emesn.com/autoitforum/viewto ... 55&start=0
Una parte del código que te puede interesar del programa que realice es esta donde busca archivos y carpetas:
Código: Seleccionar todo
;Función buscar - Busca y guarda en variables los archivos encontrados
Func _Buscar($Contrl, $Find, $one, $FileCoun, $Chekpro)
$File = _FileListToArray($Find, "*", 1)
If Not @error Then
$Split = StringReplace($Find, $Ruta & "\", "") ;Reemplaza la ruta completa por la carpeta seleccionada
$Line = "\"
If $one Then
$Split = ""
$Line = ""
EndIf
;Genera el código AutoIt para archivos
For $A = 1 To $File[0]
If $Chekpro Then _GUICtrlEdit_AppendText($Contrl, "GUICtrlSetData($Progress1 , " & ((100 / $FileCoun) * $Bar) & ")" & @CRLF)
_GUICtrlEdit_AppendText($Contrl, "FileInstall(" & '"' & $Split & $Line & $File[$A] & '"' & ", $Folder & " & '"' & $Line & $Split & "\" & $File[$A] & '"' & ", 1)" & @CRLF)
$Bar = $Bar + 1
Next
EndIf
$Folder = _FileListToArray($Find, "*", 2)
If Not @error Then
$Split2 = StringReplace($Find, $Ruta, "") ;Reemplaza la ruta completa por la carpeta seleccionada
;Genera el código AutoIt
For $B = 1 To $Folder[0]
_GUICtrlEdit_AppendText($Contrl, "DirCreate(" & "$Folder & " & '"' & $Split2 & "\" & $Folder[$B] & '"' & ")" & @CRLF)
_Buscar($Contrl, $Find & "\" & $Folder[$B], 0, $FileCoun, $Chekpro) ;Busca en subdirectorios
Next
EndIf
EndFunc ;==>_Buscar
http://www.emesn.com/autoitforum/viewto ... hilit=file
http://www.emesn.com/autoitforum/viewto ... 55&start=0
Re: se puede hacer en autoit
se puedee. seria leer el nombre y por ejemplo reemplazar con StringReeplaze la palabra "archivo_"...
y si. utilizar lo k dijo XPyro.. lo que hizo RUpert... para ahorrar camino diria yo xD
ve poniendio parte del code y vamos viendo k salee
y si. utilizar lo k dijo XPyro.. lo que hizo RUpert... para ahorrar camino diria yo xD
ve poniendio parte del code y vamos viendo k salee
Aunk no m Buskes, Seguro m enkontras!
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: se puede hacer en autoit
Puffffff......últimamente veo que han desaparecido muchos post míos, y otros que participaron, en el cual explicaba muchas cosas. Por ejemplo, un post muy largo donde participamos varios (creo que entre ellos rupert.25 con su código), donde hice un estudio de los código que pusimos para búsqueda de archivos. Dentro de este estudio puse pruebas de velocidad.
Creo recordar que en este post se dijo y se enseño mucho sobre la recursividad. Una pena que haya desaparecido junto a otros muy interesantes .
He buscado en mi tera externo y los he encontrado. Los cuelgo por si interesan. No es por echarme flores, pero recordar que eran de los más rápidos .
Codigo 1:
Codigo 2:
Las búsquedas aceptan comodines.
La diferencia entre los dos era la forma de búsqueda. Si te digo la verdad no recuerdo mucho el código ya que fue hace tiempo .
He visto que he puesto algunas líneas comentadas para realizar bien el estudio de velocidad. Si quitas muchas de estas, te salen en el label de abajo los directorios donde están buscando en ese momento.
También decir que mis funciones tiran solamente de funciones nativas de AutoIt. En cambio la de rupert.25 y Xpyro tiran de funciones creadas como _GUICtrlEdit_AppendText, _FileListToArray varias veces, y al hacer esto el código aumenta. Esto no quiere decir que sean más lentas, pero creo recordar que en este caso sí lo eran, y en un algoritmo de búsqueda la velocidad es muy importante. REITERO QUE DE ESTO ÚLTIMO NO ESTOY MUY SEGURO, YA QUE NO ESTÁ EL POST ORIGINAL .
Saludos.
Creo recordar que en este post se dijo y se enseño mucho sobre la recursividad. Una pena que haya desaparecido junto a otros muy interesantes .
He buscado en mi tera externo y los he encontrado. Los cuelgo por si interesan. No es por echarme flores, pero recordar que eran de los más rápidos .
Codigo 1:
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>
#Include <Timers.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Buscador de Archivos por Chefito", 460, 390, 193, 125, -1, 0)
GUISetBkColor(0xA0A0A4)
$Label1 = GUICtrlCreateLabel("Total de Archivos encontrados:", 8, 16, 240, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x0000FF)
$Label2 = GUICtrlCreateLabel("Carpetas donde se busca el archivo", 8, 300, 435, 80)
GUICtrlSetFont(-1, 12, 600, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x00f0FF)
$Input1=GUICtrlCreateInput("", 8, 48,150,22)
;$Edit1 = GUICtrlCreateEdit("", 8, 78, 441, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Edit1 = GUICtrlCreateList("", 8, 78, 441, 161);, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Button1 = GUICtrlCreateButton("Buscar", 30, 256, 83, 33, 0)
$Button2 = GUICtrlCreateButton("Detener", 140, 256, 83, 33, 0)
$Button3 = GUICtrlCreateButton("Carpeta a buscar", 165, 48)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_Timer_SetTimer($form1, 50, "_Eventos")
Global $seguir=1,$carpeta="C:"
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1 ;si pulsar comienza la busqueda del archivo.
If GUICtrlRead($Input1)="" Then
MsgBox(0,"Está vacio","Debes introducir el archivo a buscar")
Else
$seguir=1
;_GUICtrlEdit_SetText($Edit1, "")
$t=TimerInit()
buscar($carpeta,GUICtrlRead($Input1))
GUICtrlSetData($Label2,"Finalizada la busqueda")
EndIf
Case $Button3 ;elige el directorio donde buscar el archivo.
$carpeta = FileSelectFolder("Elegir el directorio", "")
If StringLen($carpeta)=3 Then $carpeta=StringLeft($carpeta,2)
GUICtrlSetData($Label2,$carpeta)
EndSwitch
WEnd
Func Buscar($directorio_donde_buscar,$fichero_a_buscar)
;FileChangeDir ($directorio_donde_buscar)
$directorio_donde_buscar=$directorio_donde_buscar & "\"
$search = FileFindFirstFile($directorio_donde_buscar & "*.*")
$search2 = FileFindFirstFile($directorio_donde_buscar & $fichero_a_buscar)
$file2 = FileFindNextFile($search2)
While $seguir=1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
;GUICtrlSetData($Label2,$directorio_donde_buscar & $file)
If $file=$file2 Then
;_GUICtrlEdit_InsertText ($Edit1, $directorio_donde_buscar & $file & @CRLF)
;MsgBox(0,"",TimerDiff($t)/1000)
GUICtrlSetData($Edit1,$directorio_donde_buscar & $file)
$file2 = FileFindNextFile($search2)
EndIf
Else
buscar($directorio_donde_buscar & $file,$fichero_a_buscar)
EndIf
EndIf
WEnd
FileClose($search2)
FileClose($search)
EndFunc
Func _eventos($hWnd, $Msg, $iIDTimer, $dwTime)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$seguir=0
EndSwitch
EndFunc
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>
#Include <Timers.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Buscador de Archivos por Chefito", 460, 390, 193, 125, -1, 0)
GUISetBkColor(0xA0A0A4)
$Label1 = GUICtrlCreateLabel("Total de Archivos encontrados:", 8, 16, 240, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x0000FF)
$Label2 = GUICtrlCreateLabel("Carpetas donde se busca el archivo", 8, 300, 435, 80)
GUICtrlSetFont(-1, 12, 600, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x00f0FF)
$Input1=GUICtrlCreateInput("", 8, 48,150,22)
;$Edit1 = GUICtrlCreateEdit("", 8, 78, 441, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Edit1 = GUICtrlCreateList("", 8, 78, 441, 161);, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Button1 = GUICtrlCreateButton("Buscar", 30, 256, 83, 33, 0)
$Button2 = GUICtrlCreateButton("Detener", 140, 256, 83, 33, 0)
$Button3 = GUICtrlCreateButton("Carpeta a buscar", 165, 48)
_Timer_SetTimer($form1, 50, "_Eventos")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $acabar=0,$carpeta="C:"
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1 ;si pulsar comienza la busqueda del archivo.
If GUICtrlRead($Input1)="" Then
MsgBox(0,"Está vacio","Debes introducir el archivo a buscar")
Else
$acabar=0
_GUICtrlEdit_SetText($Edit1, "")
;$t=TimerInit()
buscar($carpeta,GUICtrlRead($Input1))
;MsgBox(0,"",TimerDiff($t)/1000)
GUICtrlSetData($Label2,"Finalizada la busqueda")
EndIf
Case $Button3 ;elige el directorio donde buscar el archivo.
$carpeta = FileSelectFolder("Elegir el directorio", "")
If StringLen($carpeta)=3 Then $carpeta=StringLeft($carpeta,2)
GUICtrlSetData($Label2,$carpeta)
EndSwitch
WEnd
Func Buscar($directorio_donde_buscar,$fichero_a_buscar)
$directorio_donde_buscar=$directorio_donde_buscar & "\"
$search = FileFindFirstFile($directorio_donde_buscar & $fichero_a_buscar)
While $acabar=0 ;si $acabar=1 no entra en el while
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
;_GUICtrlEdit_InsertText ($Edit1, $directorio_donde_buscar & $file & @CRLF) ;inserta el fichero encontrado.
GUICtrlSetData($Edit1,$directorio_donde_buscar & $file)
EndIf
EndIf
WEnd
$search = FileFindFirstFile($directorio_donde_buscar & "*")
While $acabar=0 ;si $acabar=1 no entra en el while
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
;entra en este if si el resultado de $file es un archivo.
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
GUICtrlSetData($Label2,$directorio_donde_buscar & $file) ;con esta linea, se ven los directorios y los archivos.
Else
;GUICtrlSetData($Label2,$directorio_donde_buscar & $file) ;con esta linea, solo se verían los directorios.
buscar($directorio_donde_buscar & $file,$fichero_a_buscar) ;si es un directorio, la función se llama a sí misma y busca en ese directorio.
EndIf
EndIf
WEnd
FileClose($search)
EndFunc
Func _eventos($hWnd, $Msg, $iIDTimer, $dwTime)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$acabar=1
EndSwitch
EndFunc
La diferencia entre los dos era la forma de búsqueda. Si te digo la verdad no recuerdo mucho el código ya que fue hace tiempo .
He visto que he puesto algunas líneas comentadas para realizar bien el estudio de velocidad. Si quitas muchas de estas, te salen en el label de abajo los directorios donde están buscando en ese momento.
También decir que mis funciones tiran solamente de funciones nativas de AutoIt. En cambio la de rupert.25 y Xpyro tiran de funciones creadas como _GUICtrlEdit_AppendText, _FileListToArray varias veces, y al hacer esto el código aumenta. Esto no quiere decir que sean más lentas, pero creo recordar que en este caso sí lo eran, y en un algoritmo de búsqueda la velocidad es muy importante. REITERO QUE DE ESTO ÚLTIMO NO ESTOY MUY SEGURO, YA QUE NO ESTÁ EL POST ORIGINAL .
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: se puede hacer en autoit
Hola timistar.
A la hora de recorrer las carpetas para buscar archivos (y alguna cosa más) los compañeros ya te han puesto un montón de códigos interesantes, así que ahí poco más podría aportar.
Para tu caso concreto, a la hora de extraer el nombre de la carpeta desde el archivo es muy fácil, pues entiendo que la estructura es fija. Si siempre empiezan por "archivo_" y finalizan con ".pdf", lo único que hay que hacer es quitar esos caracteres y quedarte con lo del medio. Eso se puede hacer con las funciones StringTrimX.
Se trata pues de recortar 8 caracteres por la izquierda (longitud de "archivo_" y 4 por la derecha (longitud de ".pdf"):
$nombre_carpeta = StringTrimLeft(StringTrimRight($nombre_pdf, 4), 8)
Así por ejemplo "archivo_bodega_s6.pdf" se queda en "bodega_s6".
También se podría hacer con _StringBetween, aunque para esta simple extracción yo prefiero usar las otras funciones porque son nativas del intérprete AutoIt (funciones compiladas) y _StringBetween es una función AutoIT relativamente compleja, con lo que será bastante más lenta por ser interpretada y por hacer más trabajo del necesario (además tienes que incluir la udf string.au3, para las otras no hace falta).
Luego puedes usar DirCreate con ese nombre. Este comando funciona con paths relativos, aunque para aclararse bien a veces mejor montar el absoluto.
A la hora de recorrer las carpetas para buscar archivos (y alguna cosa más) los compañeros ya te han puesto un montón de códigos interesantes, así que ahí poco más podría aportar.
Para tu caso concreto, a la hora de extraer el nombre de la carpeta desde el archivo es muy fácil, pues entiendo que la estructura es fija. Si siempre empiezan por "archivo_" y finalizan con ".pdf", lo único que hay que hacer es quitar esos caracteres y quedarte con lo del medio. Eso se puede hacer con las funciones StringTrimX.
Se trata pues de recortar 8 caracteres por la izquierda (longitud de "archivo_" y 4 por la derecha (longitud de ".pdf"):
$nombre_carpeta = StringTrimLeft(StringTrimRight($nombre_pdf, 4), 8)
Así por ejemplo "archivo_bodega_s6.pdf" se queda en "bodega_s6".
También se podría hacer con _StringBetween, aunque para esta simple extracción yo prefiero usar las otras funciones porque son nativas del intérprete AutoIt (funciones compiladas) y _StringBetween es una función AutoIT relativamente compleja, con lo que será bastante más lenta por ser interpretada y por hacer más trabajo del necesario (además tienes que incluir la udf string.au3, para las otras no hace falta).
Luego puedes usar DirCreate con ese nombre. Este comando funciona con paths relativos, aunque para aclararse bien a veces mejor montar el absoluto.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: se puede hacer en autoit
jejeje hombre mil gracias
la verdad estaba a esto (_) de abandonar la idea pero con lo que me dices le hare de a pocos, ojo la iba a abandonar por que pense que me estaba complicando la vida mas esde mucha ayuda tu guia y la de los demas
en si lo que quiero hacer es sistematizar el archivo que tenemos en fisico en mi oficina por que es muy demorado estar imprimiendo y archivando cuando hay por lo menos 3 escanner multifunsionales disponibles y usan sharepoint para lamacenar en un servidor
y el archivo en menciosn se llamaria
b12_24024024_06515.pdf
o
b12_24024130_07835.pdf
donde el dato que yo quiero tomar es el que esta depues del b12 para que la carpeta se llame asi, osea 24024024 o 24024130 y asi progresivamente
claro que todo esto l o imple entare en enero porque añop nuevo archivo nuevo , p or ahora estoyprobando a avercom me va con tiempos y esas cosas en otro ppost p ondre algo que encontre de copair quelaverdad me parece supremamente largo para lo que debe hacer
por ahora dejemoslo alli dejame investigar y lespregunto
mi lgracias otra vez
la verdad estaba a esto (_) de abandonar la idea pero con lo que me dices le hare de a pocos, ojo la iba a abandonar por que pense que me estaba complicando la vida mas esde mucha ayuda tu guia y la de los demas
en si lo que quiero hacer es sistematizar el archivo que tenemos en fisico en mi oficina por que es muy demorado estar imprimiendo y archivando cuando hay por lo menos 3 escanner multifunsionales disponibles y usan sharepoint para lamacenar en un servidor
y el archivo en menciosn se llamaria
b12_24024024_06515.pdf
o
b12_24024130_07835.pdf
donde el dato que yo quiero tomar es el que esta depues del b12 para que la carpeta se llame asi, osea 24024024 o 24024130 y asi progresivamente
claro que todo esto l o imple entare en enero porque añop nuevo archivo nuevo , p or ahora estoyprobando a avercom me va con tiempos y esas cosas en otro ppost p ondre algo que encontre de copair quelaverdad me parece supremamente largo para lo que debe hacer
por ahora dejemoslo alli dejame investigar y lespregunto
mi lgracias otra vez