• 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?