Descomprimir con 7-zip

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Descomprimir con 7-zip

15 Jan 2015, 09:56

Hola,

soy algo novato en AHK y no encuentro la forma de poder descomprimir un zip, dentro de una carpeta con el mismo nombre del archivo del .zip. Llevo tiempo investigando y he visto varios ejemplos utilizando comandos del programa 7-zip;

Code: Select all

runwait, “C:\Archivos de programa\7-Zip\7z.exe” x “nombre archivo”
Aquí dejo un enlace donde muestra los comandos para 7zip: http://www.redjaen.es/francis/?m=c&o=37059

La idea es seleccionar el archivo zip, activar AHK (atajo de teclado), descomprimir en el mismo directorio con una carpeta que tenga el mismo nombre del archivo zip, eliminar el zip y continuar con más funciones.

gracias por la ayuda
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

15 Jan 2015, 12:20

Hola, prueba esto:

Code: Select all

~^q:: ;CTRL + Q = descomprimir

;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
Send, ^c 
Sleep 100
Send, ^c

;descomprimir
SplitPath, Clipboard, Nombre_Archivo, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Clipboard%",, UseErrorLevel
if (!ErrorLevel) {
	;FileRecycle, %ClipBoard%
	;FileCreateDir, %Directorio%\%Nombre_Archivo_NoEXT%
	;FileMove, %Directorio%\[NOMBRE ARCHIVO DESCOMPRIMIDO], %Directorio%\%Nombre_Archivo_NoEXT%\%Nombre_Archivo%
	Run, "%7z%" t "%Clipboard%"
}

;restaura el protapapeles
Clipboard := Clipboard_
return
Seleccionas el archivo y apretas 'CTRL + Q'.
Nota: 7z no soporta el formato RAR5 (tengo winrar 5.20 y no me lo descomprime en ese formato)

El tema de mover el archivo a una nueva carpeta con el nombre del archivo no lo vi bién, el problema es saber el nombre del archivo descomprimido.. si te funciona eso, después vemos lo de mover el archivo.
---------------------------------------------------------------------
Editado, probá esto (a mí me funciona bien):

Code: Select all

~^q:: ;CTRL + Q = descomprimir

;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
Send, ^c 
Sleep 100
Send, ^c

;descomprimir
SplitPath, Clipboard, Nombre_Archivo, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Clipboard%" -o"%Directorio%\%Nombre_Archivo_NoEXT%",, UseErrorLevel
if (!ErrorLevel) {
	;FileRecycle, %ClipBoard%
}

;restaura el protapapeles
Clipboard := Clipboard_, Clipboard_ := ""
return
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

15 Jan 2015, 12:53

Hola Flipeador,

lo he probado y parece que extrae en el escritorio archivos/carpetas del programa 7zip :o entiendo lo que quieres hacer... mira, encontré en un foro, un script que hace lo que quiero... lo copio y nos puede servir de ejemplo

Code: Select all

;alt + win + x
!#x::
temp = %clipboard%
Send, {Ctrl Down}c{Ctrl Up}
file = %clipboard% ;get file address
clipboard = %temp% ;restore clipboard
outdir := getdir(file)
if (A_Is32bitOS = 1) ; or (A_Is64bitOS = 1)
{
runwait, "X:\Aplicaciones\7-Zip\7z.exe" x "%file%" -o"%outdir%" -y,,hide
}
else
{
runwait, "X:\Aplicaciones\7-Zip\7z.exe" x "%file%" -o"%outdir%" -y,,hide
}
msgbox, 7zip has finished extracting
return
getdir(input)
{
SplitPath, input,,parentdir,,filenoext
final = %parentdir%\%filenoext%
return final
}
Este script hace lo que necesito, pero no quiero que aparezca el "msgbox" al finalizar la descompresión y el "return final", creo que no me permite continuar y quisiera añadir más pasos; como abrir la carpeta descomprimida... he intentado modificarlo hasta donde yo sé, pero me hago un lío con el uso de las variables. Por otro lado, si se puede hacer lo mismo con winrar, me da igual.

Gracias
Salva Rojas
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

15 Jan 2015, 13:06

Flipeador wrote:Hola, prueba esto:

Code: Select all

~^q:: ;CTRL + Q = descomprimir

;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
Send, ^c 
Sleep 100
Send, ^c

;descomprimir
SplitPath, Clipboard, Nombre_Archivo, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Clipboard%",, UseErrorLevel
if (!ErrorLevel) {
	;FileRecycle, %ClipBoard%
	;FileCreateDir, %Directorio%\%Nombre_Archivo_NoEXT%
	;FileMove, %Directorio%\[NOMBRE ARCHIVO DESCOMPRIMIDO], %Directorio%\%Nombre_Archivo_NoEXT%\%Nombre_Archivo%
	Run, "%7z%" t "%Clipboard%"
}

;restaura el protapapeles
Clipboard := Clipboard_
return
Seleccionas el archivo y apretas 'CTRL + Q'.
Nota: 7z no soporta el formato RAR5 (tengo winrar 5.20 y no me lo descomprime en ese formato)

El tema de mover el archivo a una nueva carpeta con el nombre del archivo no lo vi bién, el problema es saber el nombre del archivo descomprimido.. si te funciona eso, después vemos lo de mover el archivo.
---------------------------------------------------------------------
Editado, probá esto (a mí me funciona bien):

Code: Select all

~^q:: ;CTRL + Q = descomprimir

;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
Send, ^c 
Sleep 100
Send, ^c

;descomprimir
SplitPath, Clipboard, Nombre_Archivo, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Clipboard%" -o"%Directorio%\%Nombre_Archivo_NoEXT%",, UseErrorLevel
if (!ErrorLevel) {
	;FileRecycle, %ClipBoard%
}

;restaura el protapapeles
Clipboard := Clipboard_, Clipboard_ := ""
return
He provado tu último script y sí, FUNCIONA!!!
graaacias, ahora voy a ver si consigo hacer para eliminar el zip original y abrir la carpeta descomprimida.
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

15 Jan 2015, 13:08

lo he probado y parece que extrae en el escritorio archivos/carpetas del programa 7zip...
¿Como que te extrae otros archivos?, yo lo he probado y funciona bién.
entiendo lo que quieres hacer... mira, encontré en un foro, un script que hace lo que quiero..
Hace lo mismo que te he puesto, pero al parecer utiliza el archivo "7z.exe" y no "7zG.exe", aquí te paso el codigo un poco modificado, si no te funciona, cambia "C:\Archivos de programa\7-Zip\7zG.exe" por "C:\Archivos de programa\7-Zip\7z.exe"

Code: Select all

~^q:: ;CTRL + Q = descomprimir
;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
Send, ^c 
Sleep 100
Send, ^c
Ruta_Archivo := Clipboard, Clipboard := Clipboard_, Clipboard_ := ""

;descomprimir
SplitPath, Ruta_Archivo,, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Ruta_Archivo%" -o"%Directorio%\%Nombre_Archivo_NoEXT%" -y,, Hide UseErrorLevel ;-y = asume una respuesta de "SI" a todas las preguntas
if (!ErrorLevel) { 
	;FileRecycle, %Ruta_Archivo% ;eliminar el archivo comprimido
	Run, "%Directorio%\%Nombre_Archivo_NoEXT%" ;abrir directorio con el archivo
}

Ruta_Archivo := "", Directorio := "", Nombre_Archivo_NoEXT := ""
return

-------------------
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

15 Jan 2015, 13:13

¿Como que te extrae otros archivos?, yo lo he probado y funciona bién.
El segundo script, sí funcionó como indicabas. Lo siento, creo mientras respondías, estaba probando tu segundo script.

Gracias de nuevo, me es de mucha utilidad.
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

15 Jan 2015, 13:23

El segundo script, sí funcionó como indicabas.
:D , Bien. ¿Que editor utilizas?, te pregunto por que dijiste que te confundias con las variables, por si no lo usas, te recomiendo 'SciTE4', t también, si quieres, puedes usar este tema oscuro que te va a ayudar bastante con la visualización del código:

Code: Select all

# Caret, Highlights, etc
selection.fore=$(selection.fore)
selection.back=#49483E
highlight.current.word=1
highlight.current.word.colour=#666853
highlight.current.word.by.style=1
indicators.alpha=255
indicators.under=1
caret.fore=#F8F8F0
edge.colour=#EEEEEC
caret.line.back=#3E3D32

# Default (everything not below: spaces, untyped parameters)
font.normal=font:Arial,size:9
style.ahk1.0=$(font.normal),fore:#F8F8F2
style.ahk1.32=fore:#F8F8F2,back:#272822,$(font.normal)
style.*.32=fore:#F8F8F2,back:#272822,$(font.normal)

# Output
output.horizontal.size=85
output.initial.hide=1
style.errorlist.32=$(font.normal),fore:#F8F8F2,back:#272822
style.errorlist.4=fore:#F8F8F2
style.errorlist.0=fore:#FFAA00
style.errorlist.1=fore:#FFAA00
style.errorlist.2=fore:#EF2929
style.errorlist.3=fore:#FF0000

# TillaGoto Colors
tillagoto.gui.bgcolor=0x272822
tillagoto.gui.controlbgcolor=0x272822
tillagoto.gui.controlfgcolor=0xF4E982

# Line comment (; syntax)
style.ahk1.1=fore:#008000,italics

# Block comment (/*...*/ syntax)
style.ahk1.2=fore:#0xc663,italics

# Escaped characters (`x)
style.ahk1.3=fore:#9d4f4f

# Fold Margin
fold.margin.colour=#555753
fold.margin.highlight.colour=#34352D

# Line Number Margin
style.*.33=$(font.normal),fore:#EEEEEC,back:#34352D
line.margin.width=4

# Operator
style.ahk1.4=fore:#F92672

# Expression assignement operator
style.ahk1.5=fore:#F92672

# String
style.ahk1.6=fore:#ff8080

# Number
style.ahk1.7=fore:#FF8000

# Identifier (variable & function call)
style.ahk1.8=fore:#CF2F0F,italics

# Variable dereferencing %varName%
style.ahk1.9=fore:#808080

# Label & Hotstrings
style.ahk1.10=fore:#cdfe0a,back:#20202,bold,italics,underlined

# Keyword - Flow of control
style.ahk1.11=fore:#3e3eff,italics

# Keyword - Commands
style.ahk1.12=fore:#0x8080

# Keyword - Functions
style.ahk1.13=fore:#0xa6a6

# Keyword - Directives
style.ahk1.14=fore:#F92672

# Keyword - Keys & buttons
style.ahk1.15=fore:#FF00FF,back:#122127

# Keyword - Built-in Variables
style.ahk1.16=fore:#0x6bd7,italics

# Keyword - special parameters ("Keywords")
style.ahk1.17=fore:#AE81FF,italics

# Keyword - User defined
style.ahk1.18=fore:#F8F8F2

# Variable keyword (built-in) dereferencing %A_xxx%
style.ahk1.19=fore:#0x6bd7

# Error (unclosed string, unknown operator, invalid dereferencing, etc.)
style.ahk1.20=fore:#EF2929,italics
va en '%A_MyDocuments%\AutoHotKey\SciTE\Styles' con el nombre 'AutoHotKey.style.properties', luego para configurarlo abres SciTE4, 'Herramientas\SciTE4AutoHotKey Settings\Style\AutoHotKey'.
Lo siento, creo mientras respondías, estaba probando tu segundo script.
Si, mientras te respondia me llego un correo con que habias respondió :lol: .

Saludos!
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

15 Jan 2015, 13:46

Bien. ¿Que editor utilizas?, te pregunto por que dijiste que te confundias con las variables, por si no lo usas, te recomiendo 'SciTE4', t también, si quieres, puedes usar este tema oscuro que te va a ayudar bastante con la visualización del código:
Utilizo el SciTE4, tal y como comentó "Pinkfloydd" en este foro. Instalado el estilo que has pasado. Parece que me gusta más. :thumbup: Bueno, es que al ser novato en esto, me cuesta identificar según qué cosas.... jajaaaa!! espero poder aprender más.

Por cierto, estoy provando... puedo abrir la carpeta descomprimida con

Code: Select all

Run "%Directorio%\%Nombre_Archivo_NoEXT%" 
pero, si quisiera abrirla en la misma ventana donde se descomprimió. deduzco que en vez de "RUN" sería otro comando. ¿tienes idea de cual?
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

15 Jan 2015, 14:08

Por cierto, estoy provando... puedo abrir la carpeta descomprimida con

Code: Select all

Run "%Directorio%\%Nombre_Archivo_NoEXT%" 
pero, si quisiera abrirla en la misma ventana donde se descomprimió. deduzco que en vez de "RUN" sería otro comando. ¿tienes idea de cual?
Puede usar
WinClose
y abrir una ventana nueva.

Code: Select all

SendMode, Input
SetBatchLines, -1
SetWinDelay, -1

~^q:: ;CTRL + Q = descomprimir

;inicio
7z := "C:\Archivos de programa\7-Zip\7zG.exe"
ID := WinActive("A")

;guarda una copia del portapapeles
Clipboard_ := ClipboardAll 

;copiar la ruta del archivo comprimido
SendInput, ^c 
Sleep, 200
SendInput, ^c 
Ruta_Archivo := Clipboard, Clipboard := Clipboard_, Clipboard_ := ""

;descomprimir
SplitPath, Ruta_Archivo,, Directorio,, Nombre_Archivo_NoEXT
RunWait, "%7z%" x "%Ruta_Archivo%" -o"%Directorio%\%Nombre_Archivo_NoEXT%" -y,, Hide UseErrorLevel ;-y = asume una respuesta de "SI" a todas las preguntas
if (!ErrorLevel) { 
	;FileRecycle, %Ruta_Archivo% ;eliminar el archivo comprimido
	if (Directorio != A_Desktop) 
		WinClose, ahk_id %ID%
	Run, "%Directorio%\%Nombre_Archivo_NoEXT%" ;abrir directorio con el archivo
}

Ruta_Archivo := "", Directorio := "", Nombre_Archivo_NoEXT := ""
return
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

16 Jan 2015, 01:57

Oook, este último script es lo que necesito. Sólo una cosa Flipeador, me di cuenta de que no eliminaba el zip. Delante del comando "FileRecycle" hay una ;

Code: Select all

;FileRecycle, %Ruta_Archivo% ;eliminar el archivo comprimido
Al suprimirla, ya funciona como era de esperar. ¿era para ver si estava atento, no? :wtf:

Saludos
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

16 Jan 2015, 06:58

Oook, este último script es lo que necesito.
Bien. ;)
¿era para ver si estava atento, no?
En realidad NO, lo puse como ';comentario' ya que era una prueba, la idea es probar que funcione todo correctamente y luego eliminar el archivo. Pensé que te ivas a dar cuenta enseguida :lol: . Como vi en tus comentarios que seguias buscando la forma de eliminarlo (ya habiendotelo puesto), agregé el ';eliminar el archivo comprimido' y ahí te diste cuenta :D .

Si quieres que en vez de enviar el archivo a la papelera de reciclaje lo elimine, debes cambiar 'FileRecycle' por 'FileDelete', yo lo puse por las dudas que quieras recuperar el archivo comprimido.
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

16 Jan 2015, 10:56

genial Flipeador, Sí la verdad es que ya me sirve así, he reemplazado 'fileRecycle' por 'filedelete'. Lo prefiero así. Para ser más preciso he aplicado lo siguiente en esa línea

Code: Select all

FileDelete,%Directorio%\%Nombre_Archivo_NoEXT%.zip
he añadido todo el nombre completo con la extensión, vaya ser que le de por surprimir la carpeta... así es más preciso con lo que quiero eliminar y funciona igual.
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

16 Jan 2015, 12:08

No me había dado cuenta :crazy: ya que me eliminaba el archivo igual, raro...
Carpeta no te va a eliminar, para eso esta 'FileRemoveDir'


Si descomprimes un archivo con otra extension (como .rar) no te lo va a eliminar, debes cambiar:

Code: Select all

SplitPath, Ruta_Archivo,, Directorio,, Nombre_Archivo_NoEXT
por:

Code: Select all

SplitPath, Ruta_Archivo, _Nombre_Archivo_, Directorio,, Nombre_Archivo_NoEXT
Entonces, quedaría:

Code: Select all

FileDelete, %Directorio%\%_Nombre_Archivo_%
:D
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

19 Jan 2015, 04:22

Si descomprimes un archivo con otra extension (como .rar) no te lo va a eliminar, debes cambiar:
Tienes razón, aunque principalmente lo utilizaré para zips, pero bueno ya que tenemos este script, si alguna vez lo necesito para descomprimir otra cosa, se puede aprovehar. Ok, como me lo has pasado funciona bieeeen!!

Eres un crack!!!!! :clap:
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

21 Jan 2015, 06:40

Hola Flipeador,

He provado el script en el PC donde voy a trabajar que tiene windows 8.1 (con el que lo editamos, tenía el XP) y tras descomprimir, parece que no continua con la secuencia... No borra el archivo descomprimido y no cierra la ventana. He estado cambiando varias lineas después de

Code: Select all

RunWait, "%7z%" x "%Ruta_Archivo%" -o"%Directorio%\%Nombre_Archivo_NoEXT%" -y,, Hide UseErrorLevel ;-y = asume una respuesta de "SI" a todas las preguntas
if (!ErrorLevel) {
no consigo dar con el problema. :headwall: En un principio asumimos que si consigue descomprimir; es que todas las variables de las ruta funcionan, quizá sea un problema de alguna función...
¿tienes alguna idea? :crazy:

graaacias!
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

21 Jan 2015, 08:02

Hola,
En este momento tengo Xp así que vamos a ver...
Dices que te descomprime, hasta ahí todo bién, lo que no hace es ejecutar lo que está dentro de lo que sería 'ERRORLEVEL { ... }' :?:

Prueba Con Esto (editado):

Code: Select all

SendMode, Input
SetBatchLines, -1
if (!A_IsAdmin) {
	MsgBox, 4144, , Ejecutar Como Administrador`, %A_UserName%
	ExitApp
}

;grupos
GroupAdd, Explorador, ahk_class Shell_TrayWnd
GroupAdd, Explorador, ahk_class Progman
GroupAdd, Explorador, ahk_class CabinetWClass

#IfWinActive, ahk_group Explorador
	^q:: ;CTRL + Q = descomprimir
	;inicio
	RegRead, Programa, HKLM, Software\7-Zip, Path
	Programa := Programa "\7zG.exe"
	Ventana_ID := WinActive("A"), i := "", i := []

	;guarda una copia del portapapeles
	Portapapeles_Copia := {1:Clipboard}

	;copiar la ruta del archivo comprimido
	SendInput, ^c
	Sleep, 100
	SendInput, ^c
	Sleep, 100

	Portapapeles := Clipboard, Clipboard := Portapapeles_Copia[1], Portapapeles_Copia := ""
	Loop, Parse, Portapapeles, `n, `r
		if (FileExist(A_LoopField))
			i.Insert(A_LoopField)

	;descomprimir
	For k, v in i {
		SplitPath, v, Nombre, Directorio, extension, Nombre_Ex
		Carpeta := Directorio "\" Nombre_Ex
		
		Loop
			if (FileExist(Carpeta)) {
				Carpeta := Carpeta "(" A_Index ")"
			} else
				break
				
		RunWait, "%Programa%" x "%v%" -o"%Carpeta%" -y,, Hide UseErrorLevel
		if (!ErrorLevel) {
			FileRecycle, %v%
			if (Directorio != A_Desktop)
				WinClose, ahk_id %Ventana_ID%
			
			Run, "%Carpeta%"
		} else
			MsgBox, 4112, %A_ScriptName%, ERROR %ErrorLevel%`nPrograma: %Programa%`nArchivo: %v%`nDestino: %Carpeta%
	}
	return
#If
Si el problema sigue (no borra el archivo), pon la información del 'MsgBox', si no te sale, ponlo después del 'ErrorLevel' (quita el "else").

Nota: ejecuta el script como administrador. puedes editar el ejecutable de autohotkey en propiedades para que se ejecute siempre como admin.
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

21 Jan 2015, 11:39

Dices que te descomprime, hasta ahí todo bién, lo que no hace es ejecutar lo que está dentro de lo que sería 'ERRORLEVEL { ... }' :?:
Sí. eso es lo que entiendo, el problema se produce en 'ERRORLEVEL'
He compilado el nuevo script y ejecutado como admin, pero el script se detiene en el mismo punto que el anterior; tras descomprimir.
Si el problema sigue (no borra el archivo), pon la información del 'MsgBox', si no te sale, ponlo después del 'ErrorLevel' (quita el "else").
Esta parte no la tengo tan clara (no sé a qué msgbox te refieres: al del inicio o al de después de 'ERRORLEVEL' { } deduzco por más lógica que es al de después de 'ERRORLEVEL'. En ese caso he probado dos cosas:
  • · Suprimir else después de 'ERRORLEVEL' { } y no ha funcionado
    · Suprimir else después de 'ERRORLEVEL' { } y copiar 'MsgBox' dentro de 'ERRORLEVEL' antes que 'FileRecycle'. y no ha funcionado
Lo siento, pero en esta parte estoy algo perdido y voy a ciegas con lo que hago, aunque con tu ayuda estoy aprendido mucho más... Por otra parte, veo que has utilizado %programas% para definir la ruta de windows, donde se instalo 7-zip, esto esta muy bien por si el programa se instala en otra ruta distinta en otro PC. GENIAL
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

21 Jan 2015, 12:13

Ok, veamos...
el problema se produce en 'ERRORLEVEL'
Cuando ejecutas el comando (CTRL+Q) una segunda vez en otro archivo, ¿te lo descomprime correctamente?.
Suprimir else después de 'ERRORLEVEL' { } y no ha funcionado
Si, eso era, o sea, debería de quedarte así:

Code: Select all

		if (!ErrorLevel) {
			FileRecycle, %v%
			if (Directorio != A_Desktop)
				WinClose, ahk_id %Ventana_ID%
			
			Run, "%Carpeta%"
		}
		MsgBox, 4112, %A_ScriptName%, ERROR %ErrorLevel%`nPrograma: %Programa%`nArchivo: %v%`nDestino: %Carpeta%
Debería aparecer el Mensaje ya que está fuera de errorlevel, si no aparece, eso quiere decir que el script no continua después de RunWait, este comando espera a que la ventana de 7-zip se cierre, y si no se cierra el script no continua y queda ahí esperando...

Prueba Modificar el script cambiando esta parte:

Code: Select all

RunWait, "%Programa%" x "%v%" -o"%Carpeta%",, UseErrorLevel
Fijate si al terminar de descomprimir cierra la ventana.

Si continua el problema, prueba con esto:

Code: Select all

SendMode, Input
SetBatchLines, -1
if (!A_IsAdmin) {
	MsgBox, 4144, , Ejecutar Como Administrador`, %A_UserName%
	ExitApp
}

;grupos
GroupAdd, Explorador, ahk_class Shell_TrayWnd
GroupAdd, Explorador, ahk_class Progman
GroupAdd, Explorador, ahk_class CabinetWClass

#IfWinActive, ahk_group Explorador
	^q:: ;CTRL + Q = descomprimir
	;inicio
	RegRead, Programa, HKLM, Software\7-Zip, Path
	Programa := Programa "\7zG.exe"
	Ventana_ID := WinActive("A"), i := "", i := []

	;guarda una copia del portapapeles
	Portapapeles_Copia := {1:Clipboard}

	;copiar la ruta del archivo comprimido
	SendInput, ^c
	Sleep, 100
	SendInput, ^c
	Sleep, 100

	Portapapeles := Clipboard, Clipboard := Portapapeles_Copia[1], Portapapeles_Copia := ""
	Loop, Parse, Portapapeles, `n, `r
		if (FileExist(A_LoopField))
			i.Insert(A_LoopField)

	;descomprimir
	For k, v in i {
		SplitPath, v, Nombre, Directorio, extension, Nombre_Ex
		Carpeta := Directorio "\" Nombre_Ex
		
		Loop
			if (FileExist(Carpeta)) {
				Carpeta := Carpeta "(" A_Index ")"
			} else
				break
				
		Run, "%Programa%" x "%v%" -o"%Carpeta%" -y,, Hide UseErrorLevel, PID
		Process, Wait, %PID%, 5
		Process, WaitClose, %PID%
		if (!ErrorLevel) {
			FileRecycle, %v%
			if (Directorio != A_Desktop)
				WinClose, ahk_id %Ventana_ID%
				
			Run, "%Carpeta%"
		} else
			MsgBox, 4112, %A_ScriptName%, ERROR %ErrorLevel%`nPrograma: %Programa%`nArchivo: %v%`nDestino: %Carpeta%`nPID: %PID%
	}
	return
#If
User avatar
salvarb
Posts: 15
Joined: 15 Jan 2015, 07:19

Re: Descomprimir con 7-zip

21 Jan 2015, 12:57

ok, ;)
Cuando ejecutas el comando (CTRL+Q) una segunda vez en otro archivo, ¿te lo descomprime correctamente?.
Después de ejecutarlo una vez, no funciona más. Es lo que dices; parece que el script se queda esperando y la única forma de que vuelva a funcionar, es cerrando y volver a ejecutar.
Fijate si al terminar de descomprimir cierra la ventana.
tienes razón el problema está en la función 'RunWait', el script se queda esperando, pero no aparece ninguna ventana de 7-zip (es como si se hiciera en segundo plano, lo cual me gusta más), se descomprime y se detiene la secuencia, no cierra la ventana...
Prueba Modificar el script cambiando esta parte:
Code: [Select all] [Expand/Collapse] [Download] (Script.ahk)
RunWait, "%Programa%" x "%v%" -o"%Carpeta%",, UseErrorLevel
He modificado el script en la línea 'RunWait' y en esta ocasión, sí aparece la ventana de progreso de la extracción (el archivo se descomprime), ésta ventana no se cierra y en registro de actividad (por así decirlo) aparecen los siguientes textos:
  • 1 C:----ruta----\*.zip
    2 Warnings: There are some data after the end of the payload data
Cuando pulso en el boton "Cerrar", aparece un msgbox que indica lo siguiente:
ERROR 2
Programa: X:----ruta----\7zG.exe
Archivo: C:----ruta-----\*.zip
Destino: C:----ruta-----
Si continua el problema, prueba con esto:
Lo he probado y se detiene justo después de descomprimir, no elimina el archivo comprimido y no cierra ventana.
User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Descomprimir con 7-zip

21 Jan 2015, 13:20

• Asegurate de tener la última version (9.38 BETA).
Puedes Comprobar Aquí. x32 | x64

• Prueba ahora éste, tiene unos pequeños cambios, haber si funciona (permite descomprimir varios archivos a la vez y si ya existe la carpeta la renombra (1), (2), etc. ya lo había puesto antes pero tenía unos errores):

Code: Select all

;inicio
SendMode, Input
SetBatchLines, -1
#NoEnv
#SingleInstance, Force
Process, Priority,, Realtime
if (!A_IsAdmin) { ;ejecutar script como administrador!
	MsgBox, 4144, , Ejecutar Como Administrador`, %A_UserName%
	ExitApp
}

;grupos
GroupAdd, Explorador, ahk_class Shell_TrayWnd
GroupAdd, Explorador, ahk_class Progman
GroupAdd, Explorador, ahk_class CabinetWClass

#IfWinActive, ahk_group Explorador ;solo funciona en el explorador de windows
	^q:: ;CTRL + Q = descomprimir
	
	;variables de configuracion
	RegRead, Programa, HKLM, Software\7-Zip, Path ;ruta (directorio) 7-Zip
	Programa := Programa "\7zG.exe" ;ruta (ejecutable) 7-Zip
	Prioridad := "Normal" ;prioridad del proceso de 7-Zip (máximo recomendado: High)
	;-- otros
	Ventana_ID := WinActive("A"), i := "", i := [] ;ID De La Ventana Activa + Crea El Array "i"
	
	;copiar la ruta del archivo comprimido
	Portapapeles_Copia := {1:Clipboard} ;guarda una copia del portapapeles
	SendInput, ^c ;CTRL + C
	Sleep, 100 ;espera 100ms
	SendInput, ^c
	Sleep, 100

	;busca los archivos a descomprimir y los pone en el array "i"
	Portapapeles := Clipboard, Clipboard := Portapapeles_Copia[1], Portapapeles_Copia := ""
	Loop, Parse, Portapapeles, `n, `r ;busca en el portapapeles
		if (FileExist(A_LoopField)) ;si el archivo a descomprimir existe, entonces:
			i.Insert(A_LoopField) ;Array

	;descomprimir
	For k, v in i {
		SplitPath, v, Nombre, Directorio, extension, Nombre_Ex
		Carpeta := Directorio "\" Nombre_Ex
		
		if (InStr(FileExist(Carpeta), "D")) ;si la carpeta ya existe (D = Carpeta, A = Archivo), entonces:
			Loop ;busca un nombre alternativo
				if (!FileExist(Carpeta "(" A_Index ")")) {
					Carpeta := Carpeta "(" A_Index ")" ;nuevo nombre
					break ;parar
				}
				
		Run, "%Programa%" x "%v%" -o"%Carpeta%" -y,, Hide UseErrorLevel, PID
		Process, Wait, %PID%, 5 ;espera a el proceso 7-zip 5s
		if (ErrorLevel) AND (i.MaxIndex() = 1) {
			Process, Priority, %PID%, %Prioridad% ;espera a que el proceso termine
			Process, WaitClose, %PID% ;espera a que el proceso termine
			
			FileRecycle, %v% ;recicla el archivo comprimido
			if (Directorio != A_Desktop) ;si el directorio no es el escritorio, entonces:
				WinClose, ahk_id %Ventana_ID% ;cerrar ventana (directorio/carpeta)
				
			Run, "%Carpeta%" ;abrir directorio nuevo
		}
	}
	return
#If
• Si el error sigue, tienes 3 opciones (he estado googleando un poco el error, y no le veo solución):
1.- usar winrar
2.- buscar la causa del error, ya que es de 7-zip y el script no tiene nada que ver (por lo que leí).
3.- usar un MsgBox preguntando si se ha descomprimido, Ejemplo:

Code: Select all

;inicio
SendMode, Input
SetBatchLines, -1
#NoEnv
#SingleInstance, Force
Process, Priority,, Realtime
if (!A_IsAdmin) { ;ejecutar script como administrador!
	MsgBox, 4144, , Ejecutar Como Administrador`, %A_UserName%
	ExitApp
}

;grupos
GroupAdd, Explorador, ahk_class Shell_TrayWnd
GroupAdd, Explorador, ahk_class Progman
GroupAdd, Explorador, ahk_class CabinetWClass

#IfWinActive, ahk_group Explorador ;solo funciona en el explorador de windows
	^q:: ;CTRL + Q = descomprimir
	
	;variables de configuracion
	RegRead, Programa, HKLM, Software\7-Zip, Path ;ruta (directorio) 7-Zip
	Programa := Programa "\7zG.exe" ;ruta (ejecutable) 7-Zip
	Prioridad := "Normal" ;prioridad del proceso de 7-Zip (máximo recomendado: High)
	;-- otros
	Ventana_ID := WinActive("A"), i := "", i := [] ;ID De La Ventana Activa + Crea El Array "i"
	
	;copiar la ruta del archivo comprimido
	Portapapeles_Copia := {1:Clipboard} ;guarda una copia del portapapeles
	SendInput, ^c ;CTRL + C
	Sleep, 100 ;espera 100ms
	SendInput, ^c
	Sleep, 100

	;busca los archivos a descomprimir y los pone en el array "i"
	Portapapeles := Clipboard, Clipboard := Portapapeles_Copia[1], Portapapeles_Copia := ""
	Loop, Parse, Portapapeles, `n, `r ;busca en el portapapeles
		if (FileExist(A_LoopField)) ;si el archivo a descomprimir existe, entonces:
			i.Insert(A_LoopField) ;Array

	;descomprimir
	For k, v in i {
		SplitPath, v, Nombre, Directorio, extension, Nombre_Ex
		Carpeta := Directorio "\" Nombre_Ex
		
		if (InStr(FileExist(Carpeta), "D")) ;si la carpeta ya existe (D = Carpeta, A = Archivo), entonces:
			Loop ;busca un nombre alternativo
				if (!FileExist(Carpeta "(" A_Index ")")) {
					Carpeta := Carpeta "(" A_Index ")" ;nuevo nombre
					break ;parar
				}
				
		Run, "%Programa%" x "%v%" -o"%Carpeta%" -y,, Hide UseErrorLevel, PID
		Process, Wait, %PID%, 5 ;espera a el proceso 7-zip 5s
		Process, Priority, %PID%, %Prioridad% ;espera a que el proceso termine
		
		MsgBox, 4132, Descomprimiendo %Nombre%, Haga Clic En 'Aceptar' Una Vez Que Se Ha Terminado De Descomprimir.
		IfMsgBox, Yes
		{
			FileRecycle, %v% ;recicla el archivo comprimido
			if (Directorio != A_Desktop) ;si el directorio no es el escritorio, entonces:
				WinClose, ahk_id %Ventana_ID% ;cerrar ventana (directorio/carpeta)
					
			Run, "%Carpeta%" ;abrir directorio nuevo
			
			Process, Close, %PID%
		}
	}
	return
#If
Editado ----------------------------------------
También puedes probar cambiar el ejecutable, al inicio del script, "7zG.exe" por "7z.exe".
O buscar si existe alguna opcion en 7z para omitir alertas/errores.

¿Cuando me dijiste de ese error que te sale, se te habrío en una nueva ventana (o sea, el título mientras descomprimia y luego de descomprimir, cuando te tiró esa advertencia, cambió el titulo de la ventana?), si es así, podemos solucionarlo fácil agregando algunas líneas, ¿puedes poner una captura luego de descomprimir y otra donde aparece la advertencia?

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 21 guests