7-zip et Windows 7: définissez «Extraire vers <dossier>» par défaut en double-cliquant

15

J'essaie de trouver un moyen de faire l'action que vous pouvez effectuer à partir du menu contextuel, "Extraire vers <folder_same_as_file_name>" l'action par défaut lorsque vous double-cliquez sur le fichier au lieu de simplement lancer 7-zip. Existe-t-il un moyen simple de procéder?

Dans l'alternative, je suppose que je pourrais essayer de passer des paramètres dans ce qui suit:

7z x <filename> -o<filename>

Mais je ne sais pas comment configurer cela (comment passer le paramètre de nom de fichier, et puis-je le faire directement ou vais-je devoir écrire un fichier de commandes à la place et lui passer le nom de fichier? tout ce qui fonctionne.

schodge
la source

Réponses:

4

Malheureusement, la méthode du programme batch afrazier ne fonctionnera pas; Windows ne gère pas l'ouverture de plusieurs fichiers comme ça. Lorsque vous essayez d'ouvrir plusieurs fichiers avec un programme, Windows n'ouvre pas une seule instance du programme et ne transmet pas les fichiers comme plusieurs arguments à cette seule instance. Au lieu de cela, Windows ouvre de nombreuses instances du programme (autant d'instances qu'il y a de fichiers), en passant un fichier à chaque instance. Ce serait bien si vous pouviez simplement utiliser% * et passer un tas de fichiers à un seul .bat, et que ce dernier exécute une boucle en traitant chaque fichier un par un, mais malheureusement vous ne pouvez utiliser que% 1 lorsque vous les définissez types d'actions dans le registre.

Quelqu'un avec un peu de temps à disposition pourrait écrire un programme qui utilise un objet mutex pour vérifier s'il y a une autre instance déjà en cours d'exécution, et si c'est le cas, pour passer son fichier à cette instance puis fermer, sur lequel l'instance d'origine mettra ce fichier dans une file d'attente et y accéder une fois le traitement de son propre fichier terminé. un lot pourrait faire l'affaire en utilisant tasklistet findaussi, mais ce n'est pas une bonne solution comme mutex.

Quoi qu'il en soit, essayez ceci pour la valeur de registre de votre commande d'extraction pour obtenir le bon nom de dossier:

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

Cela va créer un nouveau dossier dans le même répertoire que l'archive source avec le même nom que l'archive source (sans l'extension de fichier).

En outre, j'ai ajouté le -aoucommutateur pour éviter automatiquement les conflits de noms de fichiers (7z ajoutera un nombre à la fin d'un fichier à la place, vous demandant si vous souhaitez remplacer ou autre).

Justin Roettger
la source
Y a-t-il un moyen de faire comme -o*ça, mais seulement s'il y a plus d'un fichier dans l'archive? Comme dans, puis-je le faire extraire dans le répertoire actuel s'il n'y a qu'un seul fichier ou dossier dans l'archive?
NightExcessive
Par défaut dans Windows 10 "C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aou, changez le 7zFM en seulement 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
jsherk
12

Ce fil est devenu un peu déroutant en raison de réponses contradictoires (il m'a fallu un certain temps pour déterminer quelle était la bonne solution), j'ai donc pensé que ce serait une bonne idée de résumer les résultats des messages d'Afrazier et de Justin Roettger combinés avec les miens expériences:

  1. Démarrez regedit en tant qu'administrateur
  2. Ouvert HKEY_CLASSES_ROOT\7-Zip.7z
  3. Sous cette clé, développez la Shellsous-clé
  4. Définissez la (Default)valeur sur la chaîneextract
  5. Créez une nouvelle sous-clé nommée extract
  6. Définissez la (Default)valeur de la extractclé surExtract to Folder
  7. Créez une nouvelle sous-clé sous extractnommécommand
  8. Définissez la (Default)valeur de la commandclé sur:

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

(vous devrez peut-être ajuster cela pour correspondre au chemin de votre installation 7-Zip)

Au lieu de 7z avec -aou comme Justin Roettger a suggéré que j'ai fini par utiliser 7zG, car de cette façon, vous pouvez choisir d'écraser si vous le souhaitez, tout comme l'extraction avec le menu contextuel normal.

C'est ça! Les fichiers 7z sont maintenant extraits dans un dossier avec leur propre nom par double-clic. Pour d'autres extensions comme .rar et .zip, vous devez répéter ces étapes pour les clés correspondantes. (c'est-à-dire HKEY_CLASSES_ROOT \ 7-Zip.rar et HKEY_CLASSES_ROOT \ 7-Zip.zip et ainsi de suite)

Oh et pour clarifier: cela fonctionne aussi avec plusieurs fichiers sélectionnés. Pas besoin de fichier batch.

haiggoh
la source
1
Je ne vois pas ce chemin de registre. Je suis sur Windows 8 avec 7zip 64 bits.
phillipwei
Beaucoup de choses ont changé depuis ce post, mais cela fonctionne toujours très bien ... pour moi, c'était sous 7z_auto_file, pas 7-Zip.7z. Tout ce que j'ai fait a été de changer la "commande" existante C:\Program Files\7-Zip\7zG.exe x "%1" -o*et voila.
neokio
Sur Windows 10, je n'ai pas non plus vu le chemin avant d'avoir associé au moins un fichier à 7-Zip dans le gestionnaire de fichiers 7-Zip (via le Tools -> Options...menu).
Chris Nolet
Quelqu'un sait pourquoi cela ne fonctionne plus sur Windows 10? Les chemins semblent être les mêmes, mais je reçois juste une fenêtre de console noire qui se ferme immédiatement, et rien n'est extrait. J'ai essayé toutes les méthodes de ce fil.
Ryan Weiss
5

La manière simple

Installez ExtractNow . Vous pouvez le configurer pour faire exactement ce que vous voulez.


À la dure

Modification manuelle du registre comme suit ...

  • Commencez en regedittant qu'administrateur

  • Ouvrez HKCR\.7zet regardez la (Default)valeur. Prenez note de ce que c'est (dans mon cas, en tant qu'utilisateur PowerArchiver, c'est PASZIP)

  • Accédez à la clé de registre HKCRnommée que. (dans mon cas HKCR\PASZIP)

  • Sous cette clé, développez la Shellsous-clé

  • Définissez la (Default)valeur sur la chaîneextract

  • Créez une nouvelle sous-clé nommée extract

  • Définissez la (Default)valeur de la extractclé surExtract to Folder

  • Créez une nouvelle sous-clé sous extractnommécommand

  • Définissez la (Default)valeur de la commandclé sur

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

    (vous devrez peut-être ajuster le chemin)

Merci à Justin Roettger d'avoir indiqué la variable de nom correcte nécessaire pour cela.

Ça devrait être ça. Maintenant, les fichiers 7z sont extraits dans un dossier avec leur propre nom par double-clic. Pour d'autres extensions comme .rar et .zip, vous devez répéter ces étapes pour les clés correspondantes.

Si vous souhaitez uniquement effectuer les modifications sur votre compte d'utilisateur au lieu de l'ensemble du système, modifiez HKCU\Software\Classesau lieu de HKCR. HKCRest une clé virtuelle qui est une union HKLM\Software\Classeset HKCU\Software\Classesoù les données de votre compte (HKCU) remplacent les données à l'échelle du système (HKLM). Normalement, l'exécution de regedit en tant qu'administrateur signifie que la modification de HKCR modifie les données à l'échelle du système dans HKLM.


Extraire plusieurs fichiers

Bien sûr, cela ne fonctionnera pas si vous avez sélectionné plusieurs fichiers. Si vous voulez que cela fonctionne, vous devez créer le fichier de commandes suivant:

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

Maintenant, suivez les instructions ci-dessus. À la toute dernière étape, définissez la (Default)valeur de la commandclé surC:\Path\To\File.bat %*

Toutes les modifications du Registre n'ont pas été testées de la mémoire, mais devraient être correctes.

afrazier
la source
Fonctionne-t-il %~dpn1dans les associations de fichiers? (Ce n'est pas le cas dans Windows XP. Vous avez également oublié l' xextension.)
user1686
1
@grawity: Vous ne voulez pas le xdans le nom du dossier de sortie. Quant au fonctionnement ... C'est une bonne question. Je vais modifier pour répondre ...
afrazier
Hm, bon point.
user1686
Si proche, mais pas encore tout à fait là. Après avoir joué avec le code à la fois afrazier et grawity fourni, j'ai la valeur de clé par défaut définie car "C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" je n'obtenais aucun avantage de l'exécution cmd.exeque je pouvais dire, et l'ouverture par défaut de 7-zip ne le dérangeait pas. Cependant, il s'agit simplement de décompresser %~dpn1dans le même dossier que le fichier zip. Le \"%1.d\"donne un sous-répertoire \ filename.zip.d \ dans le même dossier que le fichier zip, il est donc plus proche, mais ne supprime pas l'extension. J'ai essayé des hybrides des deux, pas de chance. D'autres suggestions?
schodge
Vous devrez probablement utiliser un fichier batch.
afrazier
2

Voici le script PowerShell que j'ai écrit sur la base de la réponse de @ haiggoh. Avant de l'exécuter, vous devez ouvrir 7-zip, allez dans Outils-> Options et associer 7-zip aux extensions de fichiers souhaitées. Après cela, exécutez le script PowerShell suivant (avec les droits d'administrateur):

$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*')
}

Bien sûr, assurez-vous que cette $7zInstallationFoldervariable contient le chemin d'accès correct à votre installation 7-zip.

xx77aBs
la source
Comment le retourner? La désinstallation et la réinstallation n'ont pas fonctionné
Lombas
@Lombas essayez d'associer à nouveau 7-zip à ces extensions, si cela ne fonctionne pas, supprimez les clés de registre et réessayez.
xx77aBs
associer à nouveau 7-zip avec les extensions travaillées. Merci beaucoup!
Lombas
0

Passez des paramètres comme celui-ci:

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

Je me souviens avoir entendu des plaintes concernant Windows 7 ne permettant pas de modifier directement les actions sur les fichiers. Je ne sais pas si c'est vrai ou pas ... mais si c'est le cas, enregistrez ce qui suit en tant que *.regfichier et importez-le.

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\""
user1686
la source
0

Voici un fichier .reg qui configure l'extraction vers le dossier comme comportement par défaut lorsque vous double-cliquez sur des fichiers avec l'une des extensions suivantes - 7z / CAB / GZ / GZIP / RAR / TAR / ZIP. Vous pouvez le faire pour d'autres extensions de fichier en utilisant la même approche. Je préfère le comportement par défaut de Windows pour le montage ISO / VHD, donc je n'ai pas changé cela, et 7-Zip prend en charge de nombreux autres types de fichiers que je ne rencontre pas souvent, donc je ne l'ai pas changé pour ceux-ci.

Vous pouvez annuler cela en accédant au gestionnaire de fichiers 7-Zip, aux outils, aux options et modifiez les associations de fichiers comme vous le souhaitez.

J'ai testé sur Windows 10 x64 / 7-Zip 15.12 x64. Parce qu'il utilise C: \ Program Files pour le chemin vers 7-Zip, vous avez certainement besoin de x64 Windows + x64 7-Zip, mais je n'ai testé que sur Windows 10.

Vous aurez les mêmes options de clic droit qu'auparavant, cela ne change que ce qui se passe lorsque vous double-cliquez, et uniquement pour ces sept types de fichiers (encore une fois, vous pouvez le faire pour d'autres types de fichiers en utilisant la même approche).

S'il existe déjà un dossier de ce nom, il vous donnera la même invite 7-Zip que vous obtenez normalement, avec des options pour Oui / Oui pour tout / Renommer automatiquement / Non / Non pour tout.

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
la source