Reorganizador documentos

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Reorganizador documentos

Mensaje por Esgrimidor »

Ya estoy aquí otra vez. Buenas tardes.

Me gustaría lograr lo siguiente .

Un carpeta inicial o source folder conteniendo varias subcarpetas. Contiene todo tipo de archivos.
Una carpeta final o target folder a contener los accesos directos de los archivos contenidos en la carpeta inicial o copia literal del acceso si es preexistente.

Objetivos :
1) el script debe posibilitar excepciones en el escaneo de la carpeta inicial de algunas extensiones de archivo (de sistema, ocultos, no interesantes desde el punto de vista de organización documental).
2) el objetivo es que clasifique en la carpeta final los documentos por año, mes y opcionalmente por día.

O sea :
subcarpetas Target Folder de año = { 2011 , 2012........}
Subcarpetas de mes ={ 01.2011, 02.2011 , 03.2011, .......................}
las subcarpetas se crean al encontrar un documento que encuentra como condición su fecha de creación año y mes.
Opcionalmente puede crear la carpeta de día
Subcarpetas de día = {07.04.2011, 08.04.2011, 09.04.2011, ........... }

He puesto el formato de carpeta que a mí me gustaría, aunque para un inglés no sería aceptable o para otros prefieren utilizar en lugar de un punto una barra baja , etc. Podría ser configurable.

Por dónde empiezo compañeros ?

Qué comandos podrían estar involucrados en este script ?

Gracias

Nota : los documentos pueden ser de todo tipo : imágenes, vídeos, pdf, doc, eml, etc. Casi interesa más el filtro de archivos que no : dbf, db, thumb.db, archivos de sistema ocultos o no, y afínes.
El script debe ser acumulativo. Es decir : si el target folder ya existe no borrará las carpetas preexistentes y archivos accesos directos presentes, sino que añadirá los nuevos que correspondan.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Para crear el bucle o escaneo de la carpeta fuente o source folder :

While.....WEnd


Para saber la fecha de creación del archivo

FileGetTime()

Para copiar no el archivo, sino su acceso directo a la carpeta destino :

?

Subrutina para elegir carpeta orígen y para elegir o crear la carpeta destino

?

FileCreateShortcut()
para crear un acceso directo

FileGetShortcut()
Cómo pasar información a los lugares adecuados
Manejo de variables


Simulación
While.....WEnd
el objetivo sería escanear la carpeta orígen
Al encontrar un archivo cualquiera.

Decidir si se crea en destino un acceso directo o no.

Primera cuestión : Qué extensiones son objeto del script y cuáles no . Proponerlo en el script.

Extensiones excluidas : .exe , .com, .hlp, .db, .dbf ,

¿ Hay alguna forma de decir que los archivos de sistema , los ejecutables ,etc no son objeto ?
¿ Hay alguna forma de decir que los archivos de audio, video, pdf, documentos word u open office, etc son objeto ?


¿ Algún programita básico que haga algo parecido a lo que pido para que me sirva de guía y para coger el sistema de trabajo con variables ?
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Hola Esgrimidor:

Te pongo el código de un programa que yo utilizo para "reubicar" unas carpetas según la fecha de creación de la misma. Quizás parte del código te pueda servir.

Lo que hace este programa en concreto es buscar todas las carpetas de una carpeta_base definida, mostrarlas en una lista, permitir al usuario que seleccione las que desea "reubicar" y, al dar al botón "Reubicar", mueve las carpetas seleccionadas a carpeta_base\año\mes según la fecha de creación de dicha carpeta.

Por ejemplo:
En CARPETA_BASE tenemos las carpetas:
Carpeta1 (creada el 01/01/2010)
Carpeta2 (creada el 01/03/2010)
Carpeta3 (creada el 15/08/2010)
Carpeta4 (creada el 05/03/2011)
Carpeta5 (creada el 08/04/2011)

Si se seleccionan esas cinco carpetas, las desplazará a:
CARPETA_BASE\2010\201001\Carpeta1
CARPETA_BASE\2010\201003\Carpeta2
CARPETA_BASE\2010\201008\Carpeta3
CARPETA_BASE\2011\201103\Carpeta4
CARPETA_BASE\2011\201104\Carpeta5

Espero que te sirva de algo.

Un saludo,

Jamaro

Código: Seleccionar todo

; Reubica la carpeta de expediente terminado a la carpeta correspondiente según la fecha

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

#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstantsEx.au3>

Global $Gui_Main,$aItems, $sItems

Global $szDrive, $szDir, $szFName, $szExt
Global $carpeta_base="C:\Documents and Settings\Usuario\Mis documentos\" ; <----------------------------------------------- PONER LA CARPETA QUE SE DESEA LEER. SI SE DESEA, SE PUEDE HACER QUE SE SELECCIONE CON FileSelectFolder 
Global $carpeta,$Path,$fecha_carpeta,$carpeta_ano,$carpeta_anomes,$carpeta_destino,$carpeta_destino_sin_dir


content($carpeta_base)

Func Content($directory)
	Local $listview, $button, $item1, $item2, $item3, $input1, $msg

	$FileList = _FileListToArray($directory, '*.*', 2) ; 0=Archivos+Carpetas 1=Archivos 2=Carpetas
	If @error = 1 Then
		MsgBox(0, "", "No se han encontrado Archivos\Carpetas.")
	EndIf

	$Gui_Main=GUICreate("Directorio " & $directory, 400, 450, 100, 230, -1, $WS_EX_ACCEPTFILES)

	$listview = GUICtrlCreateListView("Nombre", 10, 10, 370, 380)
	_GUICtrlListView_SetExtendedListViewStyle($listview,BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_REGIONAL,$LVS_SORTASCENDING ));,$LVS_SORTDESCENDING)
	_GUICtrlListView_SetColumnWidth($listview, 0, 360)
	$button1 = GUICtrlCreateButton("Reubicar", 10, 400,380,20)

	For $n = 1 To UBound($FileList) - 1
		GUICtrlCreateListViewItem($FileList[$n],$listview)
	Next
	GUISetState()

	While 1
		$nMsg = GUIGetMsg()

		Switch $nMsg
			Case $button1
				For $iI = 0 To _GUICtrlListView_GetItemCount($listview)-1
					$aItem = _GUICtrlListView_GetItemChecked($listview,$iI)
						cw("Item "&$iI& " marcado: "&$aItem)
					if $aItem="True" then
						$sItems &= @LF & _GUICtrlListView_GetItemTextString($ListView, $iI)
						reubicar($carpeta_base & _GUICtrlListView_GetItemTextString($ListView, $iI))
					EndIf
				Next
			;	MsgBox(4160, "Información", "Elementos Seleccionados: " & $sItems)
					$sItems=""

			Case $GUI_EVENT_CLOSE
				Exit
		EndSwitch
	WEnd
EndFunc   ;==>Content


Func reubicar($carpeta)

;$carpeta=FileSelectFolder("Seleccione carpeta a mover",@ScriptDir,1+4)	; Selecciona carpeta a mover
$Path = _PathSplit($carpeta, $szDrive, $szDir, $szFName, $szExt)		; Separa en partes la ruta de la carpeta origen
$fecha_carpeta=FileGetTime($carpeta,1,1)								; 1=Creado, 1=AAAAMMDDHHMMSS
$carpeta_ano=Stringleft($fecha_carpeta,4)
$carpeta_anomes=Stringleft($fecha_carpeta,6)
$carpeta_destino_sin_dir=FileGetShortName($carpeta_base & $carpeta_ano & "\" & $carpeta_anomes)
$carpeta_destino=FileGetShortName($carpeta_destino_sin_dir & "\" & $szFName)
;ms($fecha_carpeta)
cw("Carpeta selecionada: " &$carpeta)
cw("Carpeta destino: " &$carpeta_destino)

if $carpeta<>"" Then	; Si existe la carpeta destino, mueve, sino crea carpeta y mueve
		if FileExists($carpeta_destino_sin_dir) then
			;			mb("Ejecuta muevecarpeta()")
			muevecarpeta($carpeta,$carpeta_destino)
		Else
			;			mb("Crea carpeta y Ejecuta muevecarpeta()")
			DirCreate($carpeta_destino_sin_dir)
			muevecarpeta($carpeta,$carpeta_destino)
		EndIf
	Else
		mb("No se ha seleccionado carpeta")
EndIf
	content($carpeta_base)	; Vuelve a actualizar la lista
EndFunc ;Reubicar

func muevecarpeta($carpeta,$carpeta_destino)
		$resultado=dirmove($carpeta,$carpeta_destino,0) ;0=No sobreescribe. 1=Sobreescribe.
		if $resultado=1 Then
			mb("Se ha movido la carpeta " & $carpeta & " a la carpeta " & $carpeta_destino)
		Else
			mb("Parece que no se ha podido mover la carpeta" &@CRLF& $carpeta & @CRLF&" a la carpeta " & @CRLF& $carpeta_destino)
		EndIf

EndFunc

















; ====================== MisUDFs ======================

func cw($texto,$linea=@ScriptLineNumber)	; Muestra con ConsoleWrite el texto indicado + @CRLF
	consolewrite("("&$linea&"): "&$texto & @crlf)
EndFunc

func mb($texto,$linea=@ScriptLineNumber)	; Muestra MsgBox
	MsgBox(0,"Aviso ("&$linea&")",$texto)
EndFunc
; =====================================================
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Gracias Jamaro. Empezaré por empollar tu código. Y seguro que aprenderé.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Ay Dios santo. Cuándo encontraré dos minutos seguidos para rememorar.
Ya no me acuerdo de que iba esto.
Lo siento.
Pero lo seguiré intentando.
Habrá que hacer el huequito en el verano si fuera posible.

Gracias por estar aquí.
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Esgrimidor, si tienes alguna duda sobre el código que publiqué me lo dices, por si te puedo ayudar en algo.

Un saludo.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

me monto el au3 y lo ejecuto a ver qué pasa

Gracias de nuevo.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Seguiré insistiendo.
Me aparecen dos ventanas.
Imagen
Imagen

Vale. Tengo que proponer en el código la carpeta base.
Lo probaré y te comentaré
Un fuerte abrazo
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Lo he hecho en pruebas sobre el escritorio

Imagen

ahora tengo que investigar a dónde puedo reubicar dichas carpetas.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Seleccioné la carpeta provisional ST y le dí a reubicar

Imagen

Me parece una aplicación muy interesante.
Es acumulativa ?
Quiero decir que si ponemos nuevas carpetas en la carpeta base va a catalogarlas junto a las anteriores ?

Gracias
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Imagen
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Lo que estoy haciendo manualmente cuando creo determinados asuntos es darles un número y crear esa carpeta
Por ejemplo 0514.11

Dentro de ella creo la carpeta CRONO y luego el año
2011

luego el mes 06.2011
y si fuera preciso el día 22.06.2011

ahí voy metiendo por orden cronológico los documentos recibidos, envíados, etc.
Y para hacer árboles temáticos utilizo un documento word que los comenta, enlace y ofrece interacciones.

Me ofrece un modo único inicial de organización documental, y luego versatilidad via enlaces.

Procuraré aprovechar tu software que me parece muy interesante en casos a considerar.

No sería el caso cuando utilizo un soft listas.exe que me crea árboles de subdirectorios para un tipo de trabajo o asunto. Pues en ese caso todas las carpetas tienen la misma fecha de creación.

El problema de la organización de documentos via explorador de windows es que no siempre es fácil sacar los metadatos de los archivos.
Es fácil sacar la fecha de creación del archivo como archivo windows, pero no la fecha de su creación en el entorno word, o de su última modificación en dicho entorno.
Si por ejemplo copiamos el archivo en cuestión la fecha de creación será la fecha que hemos ejecutado la copia.
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Ojo con el uso de documentos word que no tengan una ubicación fija, así como el uso de vínculos relativos o absolutos.

Lo mejor es fijar la ubicación del archivo word en una carpeta y luego los archivos vinculados en subcarpetas . De esta manera no hay problemas.
Y además podemos pasar la estructura a un cd/dvd
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Hola Esgrimidor.

El programita es de esas cosas para lo que encuentro muy útil Autoit, y es hacer más sencillo, tareas repetitivas del día a día. Programas que no son "super-necesarios", pero que si los tienes, te sirven de mucho, y si los dejas de tener, los hechas en falta :-)

En cuanto a las fechas y su orden, yo hace años que acostumbro a ordenar las carpetas, fotos y documentos, con AAMMDD_HHMMSS (AÑOMESDIA_HORAMINUTOSSEGUNDOS), ya que al ordenarlo alfabéticamente coincide con el orden cronológico.

En cuanto a las propiedades del documento de word, puedes hacer uso de la UDF word.au3 que, entre otras cosas, tiene la función _WordDocPropertyGet y si miras en la ayuda, verás que te devuelve muchas propiedades que puedes utilizar.

Un saludo
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

Gracias Jamaro.
Por demás está decirte que estoy totalmente de acuerdo contigo.

Tomo nota de la función que citas. Hasta ahora me remitieron a busca específica, pero ignoraba que ya estuvieran hechas estas funciones para obtener metadatos de word u de otros archivos.

Existen para PDF, xls, dwg ?

Gracias
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Hola de nuevo Esgrimidor:

Desconozco si hay UDF para archivos PDF, DWG. Sí creo que hay para XLS.

Yo me he hecho algún programita que hace uso de otros (Ghostscript, PDFToolKit,..) por ejemplo, para convertir PDF a JPG, o cortar un PDF en varios archivos indicando las páginas o intervalos de páginas.

Por el tipo de archivos que utilizas, me parece que nos dedicamos a algo del mismo ramo ;-)

Un saludo
Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

jamaro escribió:Hola de nuevo Esgrimidor:

Desconozco si hay UDF para archivos PDF, DWG. Sí creo que hay para XLS.

Yo me he hecho algún programita que hace uso de otros (Ghostscript, PDFToolKit,..) por ejemplo, para convertir PDF a JPG, o cortar un PDF en varios archivos indicando las páginas o intervalos de páginas.

Por el tipo de archivos que utilizas, me parece que nos dedicamos a algo del mismo ramo ;-)

Un saludo
Para contar pdf en varios creo que tengo un programa standard. Y lo mismo para convertir a jpg.
pero me encantaría disponer de alternativas.
Si tienes algo en autoit no me importaría engrosar mi lista de software. Soy un auténtico colgado. Cada semana tengo que buscar algo en softonic.

ramo ingeniería ??????

:smt001
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Esgrimidor escribió: ramo ingeniería ??????
Bueno, ahora sí, de la Edificación le llaman :-)

En cuanto a los programas de Autoit. En este hilo: http://www.emesn.com/autoitforum/viewto ... =12&t=2703 hice una pregunta y colgué el código para convertir PDF a JPG utilizando GhostScript (http://pages.cs.wisc.edu/~ghost/)

Y aquí te dejo código para separar o cortar archivo PDF (utilizando PDFTK (http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)

Como suelo decir, son programas sencillos, pero que me facilitan mis tareas cotidianas. Por eso mismo, el código puede que no esté muy limpio :-)

En el cuadro de diálogo puedes seleccionar archivo (o arrastrar uno desde tu explorador hasta el GUI), seleccionar las páginas o intervalos (por ejemplo: 1-3,7,9 ó 1-3,7,9-); y marcar "separado" si quieres que te cree un archivo por cada intervalo de los indicados (archivo1-3.pdf, archivo7.pdf y archivo9-end.pdf) o dejarlo desmarcado, para crear un archivo pdf con las páginas de los intervalos.

Código: Seleccionar todo

#include <Array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>	; para GUICreate .... $WS_EX_ACCEPFILES, $WS_EX_WINDOWEDGE

;Opt("GUIOnEventMode", 1) ; Modo OnEvent

; Definición de directorios de ubicación de programas y
;Global $Directorio_GhostScript = "C:\Archivos de programa\gs\gs9.02\bin\GSWin32c.exe"	; Ruta del programa GSWin32c.exe >>> http://pages.cs.wisc.edu/~ghost/
Global $Directorio_PDFTK = "c:\....................\PDFTK\pdftk.exe"	; Ruta del programa pdftk.exe >>> http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
Global $Carpeta_Origen_Dialogo = @MyDocumentsDir

#Region ### START Koda GUI section ###

$Form1_1 = GUICreate("Modificar PDF (con PDFTK)", 411, 314, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
$FondoFormulario = GUICtrlCreateInput("", -10, -100, 420, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Mensaje = GUICtrlCreateLabel("Seleccione archivo con el botón 'Seleccionar' o arrástrelo al formulario.", 14, 10, 375, 21)
$ArchivoOrigen = GUICtrlCreateInput("", 110, 50, 191, 21)
$E_ArchivoOrigen = GUICtrlCreateLabel("Archivo Origen", 20, 50, 74, 17)
$B_Seleccionar_Archivo = GUICtrlCreateButton("Seleccionar", 310, 50, 75, 25)
$E_Intervalo = GUICtrlCreateLabel("Intervalo", 20, 80, 45, 17)
$Intervalo = GUICtrlCreateInput("1-", 110, 80, 121, 21)
$Separado = GUICtrlCreateCheckbox("Separado", 110, 110, 97, 17)
$B_Procesar = GUICtrlCreateButton("Procesar PDF", 20, 150, 365, 25)
$Memo = GUICtrlCreateEdit("", 20, 190, 365, 89)
GUICtrlSetData(-1, "")
;~ $B_JPG = GUICtrlCreateButton("Convertir a JPG", 220, 118, 165, 25)
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

; Control $FondoFormulario para recibir archivo arrastrado
	; Situación X=-10 e Y=-100 para esconder el texto que se muestra en el control cuando se le arrastra un archivo y ANCHO+20 y ALTO+100 para cubrir la ventana por completo
GUICtrlSetState($FondoFormulario, $GUI_DROPACCEPTED)     ; Hace que se pueda arrastrar archivo al control
	;GUICtrlSetState($FondoFormulario, $WS_DISABLED+ $ES_AUTOHSCROLL) ; Requiere #include <GuiEdit.au3>
GUICtrlSetState($ArchivoOrigen, $GUI_DROPACCEPTED)     ; Hace que se pueda arrastrar archivo al control


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $B_Seleccionar_Archivo
			Selecciona_Archivo()
		Case $B_Procesar
			$ArchivoOrigen_T=GUICtrlRead($ArchivoOrigen)
			Procesar_PDF()
;~ 		Case $B_JPG
;~ 			$ArchivoOrigen_T=GUICtrlRead($ArchivoOrigen)
;~ 			Ejecuta_GhostScript()
		Case $GUI_EVENT_DROPPED
            $ArchivoArrastrado = @GUI_DragFile
            ConsoleWrite("Archivo Arrastrado - " & $ArchivoArrastrado & @CRLF)
			GUICtrlSetData($ArchivoOrigen,$ArchivoArrastrado)
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func Selecciona_Archivo() ; ----- Selecciona archivo PDF para modificar  -----
	Global $ArchivoOrigen_T
	$ArchivoOrigen_T=FileOpenDialog("Seleccione archivo",$Carpeta_Origen_Dialogo,"(*.pdf)",1)
	;msgbox(1,"Archivo seleccionado","El archivo seleccionado es: " & $ArchivoOrigen_T)
	GUICtrlSetData($ArchivoOrigen,$ArchivoOrigen_T)
EndFunc

func Procesar_PDF()
	Global $ArchivoOrigen_T_A,$ArchivoOrigen_T
	Global $CadenaPaginas, $CadenaPaginas_SufijoArchivo
	Global $DirectorioArchivoSalida, $DirectorioArchivoSalida_Corto, $NombreArchivoSalida, $ArchivoOrigen_T_Salida
	Global $Sobreescribir

	$ArchivoOrigen_T_A=FileGetShortName($ArchivoOrigen_T)

	If StringRight($ArchivoOrigen_T_A, 3) = "pdf" Then

	#Region ; ----- Intervalo de páginas -----
	$CadenaPaginas=""
	$CadenaPaginas_SufijoArchivo=""
	$Paginas=StringSplit(GuiCtrlRead($Intervalo),",")
		if GuiCtrlRead($Separado)=1 then  ; 1 = Marcada la opción de "Separar"
			for $a=1 to $Paginas[0]
				$CadenaPaginas=""					; Se reinicia el valor para cada For...Next
				$CadenaPaginas_SufijoArchivo=""		; Se reinicia el valor para cada For...Next
				if StringLeft($Paginas[$a],1)="-" then $Paginas[$a]="1"&$Paginas[$a]
				if StringRight($Paginas[$a],1)="-" then $Paginas[$a]=$Paginas[$a]&"end"
				$CadenaPaginas=$CadenaPaginas & "A" & $Paginas[$a] & " "
				$CadenaPaginas_SufijoArchivo=$CadenaPaginas_SufijoArchivo & "_" & $Paginas[$a]
				;msgbox(0,"",$cadenaPaginas & @cr & $cadenapaginas_sufijoArchivo)
				Nombre_Archivo_Salida()
			Next
		Else  ; Si no está marcarda la opción "Separar"
			for $a=1 to $Paginas[0]
				if StringLeft($Paginas[$a],1)="-" then $Paginas[$a]="1"&$Paginas[$a]
				if StringRight($Paginas[$a],1)="-" then $Paginas[$a]=$Paginas[$a]&"end"
				$CadenaPaginas=$CadenaPaginas & "A" & $Paginas[$a] & " "
				$CadenaPaginas_SufijoArchivo=$CadenaPaginas_SufijoArchivo&"_"&$Paginas[$a]
				;msgbox(0,"Aviso","A"&$Paginas[$a])
			Next
				;msgbox(0,"Aviso",$CadenaPaginas)
				Nombre_Archivo_Salida()
		EndIf
	Else
		msgbox(0,"Aviso","El archivo seleccionado no es PDF." & @cr & "No se realizará ninguna operación.")
	EndIf
	#EndRegion

EndFunc

Func Nombre_Archivo_Salida(); ----- Nombre archivo salida  -----
	$DirectorioArchivoSalida=""
	$NombreArchivoSalida=stringsplit($ArchivoOrigen_T,"\")
	for $a=1 to $NombreArchivoSalida[0]-1
		$DirectorioArchivoSalida=$DirectorioArchivoSalida&$NombreArchivoSalida[$a]&"\"
	Next
		$DirectorioArchivoSalida_Corto=FileGetShortName($DirectorioArchivoSalida)
		;$NombreArchivoSalida=StringLeft($NombreArchivoSalida[$NombreArchivoSalida[0]],stringlen($NombreArchivoSalida[$NombreArchivoSalida[0]])-4) & '_pdftk.pdf'
			$NombreArchivoSalida=StringLeft($NombreArchivoSalida[$NombreArchivoSalida[0]],stringlen($NombreArchivoSalida[$NombreArchivoSalida[0]])-4) & $CadenaPaginas_SufijoArchivo & '.pdf'
			$ArchivoOrigen_T_Salida=$DirectorioArchivoSalida_Corto & $NombreArchivoSalida
			;msgbox(0,"Aviso",$ArchivoOrigen_T_Salida) ;
			Comprueba_si_existe_archivo()
EndFunc

Func Comprueba_si_existe_archivo()
	if FileExists($ArchivoOrigen_T_Salida) then
		$Sobreescribir=msgbox(4,"Aviso","El archivo: " & $ArchivoOrigen_T_Salida & " ya existe." & @CR & @CR & "¿Desea sobreescribirlo?")
		if $Sobreescribir=6 Then ;El Valor 6 es del botón "Sí" del MSGBOX anterior
			Ejecuta_PDFTK()
		Else
			Msgbox(0,"Aviso","Se ha mantenido el archivo existente.")
		EndIf
	Else
		Ejecuta_PDFTK()
	EndIf

EndFunc

Func Ejecuta_PDFTK()
	#cs
	Para separar páginas de varios documentos y crear un documento nuevo con estas hacemos lo siguiente:
		pdftk A=uno.pdf B=dos.pdf cat A1-7 B1-5 output salida.pdf
	Otro ejemplo con un solo documento:
		pdftk A=archivo1.pdf cat A1-12 A14-end output salida.pdf
	#ce
	Dim $LineasArchivo[1], $x, $Paginas_Archivo

	$Directorio_PDFTK = FileGetShortName($Directorio_PDFTK)

	 $cadena=$Directorio_PDFTK & ' A=' & $ArchivoOrigen_T_A & ' cat ' & $CadenaPaginas & 'output ' & $ArchivoOrigen_T_Salida & ' dont_ask' ; Sobreescribirá si ya existe
	;	Msgbox(1,"Aviso",$cadena)
	guictrlsetdata($Memo,guictrlread($Memo) & $ArchivoOrigen_T_Salida & @CRLF)
	RunWait($cadena,"",@SW_HIDE)	; Ejecuta en modo oculto

	if FileExists($ArchivoOrigen_T_Salida) Then
		Beep(2000,100) ;Frecuencia, milisegundos
	Else
		msgbox(0,"Aviso","El archivo no se ha podido crear")
	EndIf

EndFunc

Avatar de Usuario
Esgrimidor
Hacker del Foro
Mensajes: 286
Registrado: 19 Oct 2008, 00:59
Ubicación: Santa Cruz de Tenerife
Contactar:

Re: Reorganizador documentos

Mensaje por Esgrimidor »

PDFTK ya lo estoy usando.

Me miro el código autoit

Creo que para pasar pdf a jpg me hice con algo. Pero ya hecho.
A ver si lo localizo

AXPDF PDF to Image Converter 2.11 Portable

Siempre que puedo busco portables
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Reorganizador documentos

Mensaje por jamaro »

Bueno, yo, siempre que puedo, utilizo también programas portables. Aunque en muchas ocasiones no lo son, aunque lo descarguemos de páginas que así lo indican, al menos a mi entender, puesto que son "portables" que tocan el registro y dejan archivos temporales, cosa que con los que hacemos con Autoit, en principio, no se deja basurilla.

También intento que los programas sean gratuitos (PDFTK y GhostScript, por ejemplo, lo son).

Hay aplicaciones (de pago y gratuitas) que ya hacen lo de separar el PDF en varias páginas o convertilo en JPG, pero la ventaja de la aplicación que nos hacemos con Autoit es que sirve sólo para lo que la creamos, sin más pretensiones, y con la ventaja de que en pocos pasos se hace algo cotidiano.

En el código de más arriba, simplemente con cambiar Global $Carpeta_Origen_Dialogo = @MyDocumentsDir por la carpeta en la que sueles tener tus trabajos o directorios con los que quieres trabajar (por ejemplo $Carpeta_Origen_Dialogo = C:\Documents and Settings\<Usuario>\Mis documentos\Trabajos), ya se adelanta mucho tiempo, sin necesidad de tener que ir "navegando" por el árbol de directorios hasta llegar al que necesitas.

Está claro que no son programas universales, que sirven para todos los usuarios, pero al menos para el que puede/quiere/sabe modificar el código, resulta práctico.

Y quizás lo más importante, al hacer estos pequeños programas con Autoit, surgen dudas y retos, y buscando información por los foros, se aprende muchísimo.

(Creo que me he extendido un poco) :smt003
Responder