7-zip y Windows 7: haga "Extraer en <carpeta>" predeterminado al hacer doble clic

15

Estoy tratando de encontrar una manera de realizar la acción que puede realizar desde el menú contextual, "Extraer a <folder_same_as_file_name>" la acción predeterminada al hacer doble clic en el archivo en lugar de simplemente iniciar 7-zip. ¿Hay una manera simple de hacer esto?

Como alternativa, creo que podría intentar pasar parámetros a lo siguiente:

7z x <filename> -o<filename>

Pero no estoy seguro de cómo configurar esto (cómo pasar el parámetro del nombre de archivo, y ¿puedo hacerlo directamente o tendré que escribir un archivo por lotes en su lugar y pasarle el nombre de archivo? Esto último me resulta irritantemente poco elegante, pero lo que sea que funcione.

schodge
fuente

Respuestas:

4

Desafortunadamente, el método del programa por lotes de afrazier no funcionará; Windows no maneja abrir múltiples archivos así. Cuando intenta abrir varios archivos con un programa, Windows no abre una sola instancia del programa y pasa los archivos como argumentos múltiples a esa instancia. En cambio, Windows abre muchas instancias del programa (tantas instancias como archivos), pasando un archivo a cada instancia. Sería bueno si pudieras usar% * y pasar un montón de archivos a un solo .bat, y hacer que ese .bat ejecute un bucle procesando cada archivo de uno en uno, pero desafortunadamente solo puedes usar% 1 al configurar estos tipos de acciones en el registro.

Alguien con algo de tiempo en sus manos podría escribir un programa que use un objeto mutex para verificar si ya hay otra instancia ejecutándose, y si la hay, para pasar su archivo a esa instancia y luego cerrar, donde la instancia original colocará ese archivo en una cola y llegar a ella una vez que haya terminado de procesar su propio archivo. un lote podría hacer el truco usando , tasklisty findtambién, pero esa no es una solución tan buena como mutex.

De todos modos, intente esto para su valor de registro de comando de extracción para obtener el nombre de carpeta correcto:

"\path\to\7z.exe" x "%1" -o* -aou

Esto creará una nueva carpeta en el mismo directorio que el archivo fuente con el mismo nombre que el archivo fuente (sin la extensión del archivo).

Además, agregué el -aouinterruptor para evitar automáticamente conflictos de nombre de archivo (7z agregará un número al final de un archivo en lugar de preguntarle si desea sobrescribir o lo que sea).

Justin Roettger
fuente
¿Hay alguna manera de hacer lo que -o*hace, pero solo si hay más de un archivo en el archivo? Como en, ¿puedo hacer que se extraiga al directorio actual si solo hay un archivo o carpeta en el archivo?
NocheExcesivo
El valor predeterminado en Windows 10 es "C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aoucambiar el 7zFM a solo 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
jsherk
12

Este hilo se ha vuelto un poco confuso debido a respuestas contradictorias (me tomó bastante tiempo descubrir cuál era la solución correcta), así que pensé que podría ser una buena idea resumir los resultados de las publicaciones de Afrazier y Justin Roettger combinadas con las mías. experiencias:

  1. Inicie regedit como administrador
  2. Abierto HKEY_CLASSES_ROOT\7-Zip.7z
  3. Debajo de esa tecla, expanda la Shellsubclave
  4. Establecer el (Default)valor de la cadenaextract
  5. Crear una nueva subclave llamada extract
  6. Establezca el (Default)valor de la extractclave enExtract to Folder
  7. Cree una nueva subclave debajo de extractnamedcommand
  8. Establezca el (Default)valor de la commandclave en:

C:\Program Files\7-Zip\7zG.exe x "%1" -o*

(puede que tenga que ajustar esto para que coincida con la ruta de su instalación de 7-Zip)

En lugar de 7z con -aou, como Justin Roettger sugirió que terminé usando 7zG, porque de esta manera puede elegir sobrescribir si lo desea, al igual que extraer con el menú contextual normal.

¡Eso es! Los archivos 7z ahora se extraen a una carpeta con su propio nombre haciendo doble clic. Para otras extensiones como .rar y .zip, debe repetir estos pasos para las teclas correspondientes. (es decir, HKEY_CLASSES_ROOT \ 7-Zip.rar y HKEY_CLASSES_ROOT \ 7-Zip.zip, etc.)

Ah, y para aclarar: también funciona con múltiples archivos seleccionados. No se necesita archivo por lotes.

haiggoh
fuente
1
No veo esa ruta de registro. Estoy en Windows 8 con 64 bits 7zip.
phillipwei
Mucho ha cambiado desde esta publicación, pero aún funciona muy bien ... para mí, estaba bajo 7z_auto_file, no 7-Zip.7z. Todo lo que hice fue cambiar el "comando" existente C:\Program Files\7-Zip\7zG.exe x "%1" -o*y listo.
neokio
En Windows 10, tampoco vi la ruta hasta que asocie al menos un archivo con 7-Zip en el Administrador de archivos 7-Zip (a través del Tools -> Options...menú).
Chris Nolet
¿Alguien sabe por qué esto ya no funciona en Windows 10? Los caminos parecen ser los mismos, pero acabo de obtener una ventana de consola negra que se cierra inmediatamente, y no se extrae nada. Intenté todos los métodos en este hilo.
Ryan Weiss
5

La manera fácil

Instale ExtractNow . Puede configurarlo para que haga exactamente lo que quiere.


El camino difícil

Modificación manual del registro de la siguiente manera ...

  • Comience regeditcomo administrador

  • Abre HKCR\.7zy mira el (Default)valor. Tome nota de lo que es eso (en mi caso, como usuario de PowerArchiver, es PASZIP)

  • Vaya a la clave de registro en HKCRnombre de eso. (en mi caso HKCR\PASZIP)

  • Debajo de esa tecla, expanda la Shellsubclave

  • Establecer el (Default)valor de la cadenaextract

  • Crear una nueva subclave llamada extract

  • Establezca el (Default)valor de la extractclave enExtract to Folder

  • Cree una nueva subclave debajo de extractnamedcommand

  • Establezca el (Default)valor de la commandclave en

    C:\Program Files\7-Zip\7zG.exe x "%1" -o* -aou
    

    (puede que tenga que ajustar la ruta)

Gracias a Justin Roettger por señalar la variable de nombre correcta necesaria para esto.

Eso debería ser. Ahora los archivos 7z se extraen a una carpeta con su propio nombre haciendo doble clic. Para otras extensiones como .rar y .zip, debe repetir estos pasos para las teclas correspondientes.

Si solo desea realizar los cambios en su cuenta de usuario en lugar de en todo el sistema, modifique en HKCU\Software\Classeslugar de HKCR. HKCRes una clave virtual que es una unión HKLM\Software\Classesy HKCU\Software\Classesdonde los datos en su cuenta (HKCU) anulan los datos de todo el sistema (HKLM). Normalmente, ejecutar regedit como administrador significa que modificar HKCR altera los datos de todo el sistema en HKLM.


Extrayendo múltiples archivos

Por supuesto, esto no funcionará si tiene múltiples archivos seleccionados. Si desea que eso funcione, debe crear el siguiente archivo por lotes:

@echo off
:top
if "%1"=="" goto :EOF
7z.exe x "%1" -o"%~dpn1"
shift
goto top

Ahora, siga las instrucciones anteriores. En el último paso, establezca el (Default)valor de la commandclave enC:\Path\To\File.bat %*

Todas las modificaciones del registro no se prueban desde la memoria, pero deben ser correctas.

afrazier
fuente
¿ %~dpn1Funciona en asociaciones de archivos? (No lo hace en Windows XP. Además, se olvidó xde la extensión)
User1686
1
@grawity: no desea que aparezca xen el nombre de la carpeta de salida. En cuanto a que funcione ... Esa es una buena pregunta. Voy a editar a la dirección ...
Afrazier
Hm, buen punto.
user1686
Tan cerca, pero todavía no del todo. Después de jugar con el código que se proporciona tanto como un afrazier, tengo el valor de clave predeterminado establecido, ya "C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" que no obtenía ningún beneficio de ejecución cmd.exeque pudiera decir, y la apertura predeterminada de 7-zip no se molestó con eso. Sin embargo, esto solo se está descomprimiendo %~dpn1en la misma carpeta que el archivo zip. El \"%1.d\"da un subdirectorio \ filename.zip.d \ en la misma carpeta que el archivo zip, por lo que está más cerca, pero no elimina la extensión. He probado los híbridos de los dos, no tuve suerte. ¿Cualquier otra sugerencia?
Schodge
Probablemente tendrá que usar un archivo por lotes.
Afrazier
2

Aquí está el script de PowerShell que escribí basado en la respuesta de @ haiggoh. Antes de ejecutarlo, debe abrir 7-zip, ir a Herramientas-> Opciones y asociar 7-zip con las extensiones de archivo deseadas. Después de eso, ejecute el siguiente script de PowerShell (con derechos de administrador):

$7zInstallationFolder = 'C:\Program Files\7-Zip'
$reg = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::ClassesRoot, [Microsoft.Win32.RegistryView]::Default)
$subKeys = $reg.GetSubKeyNames() | where { $_ -match '7-Zip.' }
foreach ($keyName in $subKeys) {
    $key = $reg.OpenSubKey($keyName + '\shell\open\command', $true)
    $key.SetValue('', '"' + $7zInstallationFolder + '\7zG.exe" x "%1" -o*')
}

Por supuesto, asegúrese de que la $7zInstallationFoldervariable contenga la ruta correcta a su instalación de 7-zip.

xx77aBs
fuente
¿Cómo revertirlo? La desinstalación y la reinstalación no funcionaron
Lombas
@Lombas intente asociar 7-zip nuevamente con esas extensiones, si no funciona, elimine las claves de registro y vuelva a intentarlo.
xx77aBs
asociando 7-zip nuevamente con las extensiones trabajadas. ¡Muchas gracias!
Lombas
0

Pase parámetros como este:

7z x "%1" -o"%1.d"

Recuerdo haber escuchado quejas sobre Windows 7 que no permiten editar directamente acciones de archivos. No sé si esto es cierto o no ... pero si es así, guarde lo siguiente como un *.regarchivo e impórtelo.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\7-Zip.7z\shell\extract]
@="Extract to folder"

[HKEY_CURRENT_USER\Software\Classes\7-Zip.7z\shell\extract\command]
@="7z.exe x \"%1\" -o\"%1.d\""
usuario1686
fuente
0

Aquí hay un archivo .reg que configura Extraer a la carpeta como el comportamiento predeterminado al hacer doble clic en los archivos con una de las siguientes extensiones: 7z / CAB / GZ / GZIP / RAR / TAR / ZIP. Puede hacerlo para otras extensiones de archivo con el mismo enfoque. Prefiero el comportamiento predeterminado de Windows para el montaje ISO / VHD, por lo que no cambié eso, y 7-Zip admite muchos otros tipos de archivos que no encuentro comúnmente, por lo que no lo cambié por esos.

Puede revertir esto yendo al Administrador de archivos 7-Zip, Herramientas, Opciones, y cambie las asociaciones de archivos según lo desee.

Probé en Windows 10 x64 / 7-Zip 15.12 x64. Debido a que usa C: \ Archivos de programa para la ruta a 7-Zip, definitivamente necesitas x64 Windows + x64 7-Zip, pero solo probé en Windows 10.

Tendrá las mismas opciones de clic con el botón derecho que antes, esto solo cambia lo que sucede cuando hace doble clic, y solo para esos siete tipos de archivos (nuevamente, puede hacer esto para otros tipos de archivos con el mismo enfoque).

Si ya hay una carpeta con ese nombre, le dará el mismo aviso de 7-Zip que obtiene normalmente, con opciones para Sí / Sí a Todos / Renombrar automáticamente / No / No a Todos.

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes.7z]
@="7-Zip.7z"
[HKEY_CURRENT_USER\SOFTWARE\Classes.cab]
@="7-Zip.cab"
[HKEY_CURRENT_USER\SOFTWARE\Classes.gz]
@="7-Zip.gz"
[HKEY_CURRENT_USER\SOFTWARE\Classes.gzip]
@="7-Zip.gzip"
[HKEY_CURRENT_USER\SOFTWARE\Classes.rar]
@="7-Zip.rar"
[HKEY_CURRENT_USER\SOFTWARE\Classes.tar]
@="7-Zip.tar"
[HKEY_CURRENT_USER\SOFTWARE\Classes.zip]
@="7-Zip.zip"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.7z]
@="7z Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.7z\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,0"
[HKEY_CLASSES_ROOT\7-Zip.7z\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.7z\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.7z\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.7z\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.7z\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.cab]
@="cab Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.cab\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,7"
[HKEY_CLASSES_ROOT\7-Zip.cab\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.cab\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.cab\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.cab\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.cab\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gz]
@="gz Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gz\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,14"
[HKEY_CLASSES_ROOT\7-Zip.gz\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.gz\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.gz\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gz\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gz\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gzip]
@="gzip Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gzip\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,14"
[HKEY_CLASSES_ROOT\7-Zip.gzip\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.gzip\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.gzip\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gzip\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.gzip\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.rar]
@="rar Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.rar\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,3"
[HKEY_CLASSES_ROOT\7-Zip.rar\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.rar\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.rar\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.rar\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.rar\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.tar]
@="tar Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.tar\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,13"
[HKEY_CLASSES_ROOT\7-Zip.tar\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.tar\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.tar\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.tar\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.tar\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.zip]
@="zip Archive"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.zip\DefaultIcon]
@="C:\Program Files\7-Zip\7z.dll,1"
[HKEY_CLASSES_ROOT\7-Zip.zip\shell]
@="extract"
[HKEY_CLASSES_ROOT\7-Zip.zip\shell\extract]
@="Extract to Folder"
[HKEY_CLASSES_ROOT\7-Zip.zip\shell\extract\command]
@="\"C:\Program Files\7-Zip\7zG.exe\" x \"%1\" -o*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.zip\shell\open]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\7-Zip.zip\shell\open\command]
@="\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""

Craig
fuente