7-zip & Windows 7: по умолчанию дважды щелкните «Извлечь в <папку>»

15

Я пытаюсь найти способ сделать действие, которое вы можете выполнить, из контекстного меню «Извлечь в <folder_same_as_file_name>» действие по умолчанию при двойном щелчке файла вместо простого запуска 7-zip. Есть ли простой способ сделать это?

В альтернативе, я могу попробовать передать параметры в следующее:

7z x <filename> -o<filename>

Но я не уверен, как это настроить (как передать параметр имени файла, и могу ли я сделать это напрямую или мне придется вместо этого написать командный файл и передать ему имя файла? Последнее я нахожу раздражающе не элегантным, но что бы ни работало.

schodge
источник

Ответы:

4

К сожалению, метод пакетной программы afrazier не будет работать; Windows не справляется с открытием нескольких файлов. Когда вы пытаетесь открыть несколько файлов с помощью программы, Windows не открывает один экземпляр программы и не передает файлы в качестве нескольких аргументов этому одному экземпляру. Вместо этого Windows открывает много экземпляров программы (столько же, сколько существует файлов), передавая один файл каждому экземпляру. Было бы неплохо, если бы вы могли просто использовать% * и передать кучу файлов в один .bat, а этот .bat запустить цикл, обрабатывающий каждый файл по одному, но, к сожалению, вы можете использовать только% 1 при установке этих виды действий в реестре.

Кто-то, у кого есть время, может написать программу, которая использует объект мьютекса, чтобы проверить, запущен ли уже другой экземпляр, и, если есть, передать этот файл этому экземпляру и затем закрыть, после чего исходный экземпляр поместит этот файл. в очередь и доберитесь до нее, когда закончите обработку своего собственного файла. Пакет может сделать трюк, используя tasklistи findтоже, но это не такое хорошее решение, как мьютекс.

В любом случае, попробуйте это для своего значения реестра команды extract, чтобы получить правильное имя папки:

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

Это создаст новую папку в том же каталоге, что и исходный архив с тем же именем, что и исходный архив (без расширения файла).

Кроме того, я добавил -aouпереключатель, чтобы автоматически избегать конфликтов имен файлов (7z будет добавлять число в конец файла, вместо этого предлагая вам перезаписать или нет).

Джастин Реттгер
источник
Есть ли способ сделать -o*это, но только если в архиве более одного файла? Например, можно ли извлечь его из текущего каталога, если в архиве только один файл или папка?
NightExcessive
По умолчанию в Windows 10 "C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aouтак изменить 7zFM только на 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
jsherk
12

Эта тема стала немного запутанной из-за противоречивых ответов (мне потребовалось довольно много времени, чтобы выяснить, какое решение было правильным), поэтому я подумал, что было бы неплохо обобщить результаты постов afrazier и Джастина Реттгера в сочетании с моими собственными опыт:

  1. Запустите regedit от имени администратора
  2. открыто HKEY_CLASSES_ROOT\7-Zip.7z
  3. Под этим ключом раскройте Shellподраздел
  4. Установите (Default)значение в строкуextract
  5. Создайте новый подраздел с именем extract
  6. Установите (Default)для extractключа значениеExtract to Folder
  7. Создайте новый подраздел под extractименемcommand
  8. Установите (Default)значение commandключа:

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

(возможно, вам придется настроить это в соответствии с путем установки 7-Zip)

Вместо 7z с -a, как вы предложили, Джастин Реттгер предложил использовать 7zG, потому что таким образом вы можете выбрать перезапись, если вам нравится просто извлечь из обычного контекстного меню.

Это оно! Файлы 7z теперь извлекаются в папку с собственным именем двойным щелчком мыши. Для других расширений, таких как .rar и .zip, вам необходимо повторить эти шаги для соответствующих ключей. (то есть HKEY_CLASSES_ROOT \ 7-Zip.rar и HKEY_CLASSES_ROOT \ 7-Zip.zip и т. д.)

Да, и для уточнения: он работает с несколькими выбранными файлами. Нет необходимости в пакетном файле.

haiggoh
источник
1
Я не вижу этот путь в реестре. Я на Windows 8 с 64-битной 7zip.
phillipwei
Многое изменилось с этого поста, но все равно прекрасно работает ... для меня это было в 7z_auto_file, а не в 7-Zip.7z. Все, что я сделал, это изменил существующую «команду» C:\Program Files\7-Zip\7zG.exe x "%1" -o*и вуаля.
neokio
В Windows 10 я также не видел путь, пока не связал хотя бы один файл с 7-Zip в диспетчере файлов 7-Zip (через Tools -> Options...меню).
Крис Нолет
Кто-нибудь знает, почему это больше не работает в Windows 10? Пути кажутся одинаковыми, но я просто получаю черное окно консоли, которое немедленно закрывается, и ничего не извлекается. Перепробовал все методы в этой теме.
Райан Вайс
5

Легкий способ

Установите ExtractNow . Вы можете настроить его, чтобы делать именно то, что вы хотите.


Трудный путь

Ручное изменение реестра следующим образом ...

  • Начать с regeditправами администратора

  • Откройте HKCR\.7zи посмотрите на (Default)значение. Обратите внимание, что это такое (в моем случае, как пользователь PowerArchiver, это PASZIP)

  • Перейдите к разделу реестра в HKCRназванном. (в моем случае HKCR\PASZIP)

  • Под этим ключом раскройте Shellподраздел

  • Установите (Default)значение в строкуextract

  • Создайте новый подраздел с именем extract

  • Установите (Default)для extractключа значениеExtract to Folder

  • Создайте новый подраздел под extractименемcommand

  • Установите (Default)значение commandключа в

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

    (возможно, вам придется скорректировать путь)

Спасибо Джастину Реттгеру за указание правильной переменной имени, необходимой для этого.

Это должно быть так. Теперь файлы 7z извлекаются в папку с собственным именем двойным щелчком мыши. Для других расширений, таких как .rar и .zip, вам нужно повторить эти шаги для соответствующих ключей.

Если вы хотите вносить изменения только в свою учетную запись пользователя, а не в систему, измените ее HKCU\Software\Classesвместо HKCR. HKCRпредставляет собой виртуальный ключ, это объединение HKLM\Software\Classesи HKCU\Software\Classesгде данные в вашем аккаунте (HKCU) перекрывают общесистемные данные (HKLM). Обычно использование regedit в качестве администратора означает, что изменение HKCR изменяет общесистемные данные в HKLM.


Извлечение нескольких файлов

Конечно, это не будет работать, если у вас выбрано несколько файлов. Если вы хотите, чтобы это работало, вам нужно создать следующий командный файл:

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

Теперь следуйте инструкциям выше. На самом последнем шаге установите (Default)значение commandключа равнымC:\Path\To\File.bat %*

Все изменения реестра не проверены в памяти, но должны быть правильными.

afrazier
источник
Работает ли %~dpn1в файловых ассоциациях? (Это не в Windows XP. Кроме того, вы забыли xо расширении.)
user1686
1
@ Grawity: Вы не хотите xв имени выходной папки. Что касается работы ... Это хороший вопрос. Я отредактирую по адресу ...
afrazier
Хм, хорошая мысль.
user1686
Так близко, но еще не совсем там. После того, как я поиграл с кодом, доступным как afrazier, так и grawity, у меня установлено значение ключа по умолчанию, так как "C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" я не получил никакой выгоды от запуска, cmd.exeкоторый я мог сказать, и открытие по умолчанию 7-zip не беспокоило его. Тем не менее, это просто разархивировать %~dpn1в той же папке, что и ZIP-файл. Это \"%1.d\"дает подкаталог \ filename.zip.d \ в той же папке, что и zip-файл, так что он ближе, но не удаляет расширение. Я попробовал гибриды двух, не повезло. Любые другие предложения?
Шодж
Вам, вероятно, придется использовать командный файл.
afrazier
2

Вот сценарий PowerShell, который я написал на основе ответа @ haiggoh. Перед тем, как запустить его, вам нужно открыть 7-zip, перейти в Сервис-> Параметры и связать 7-zip с нужными расширениями файлов. После этого запустите следующий скрипт PowerShell (с правами администратора):

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

Конечно, убедитесь, что $7zInstallationFolderпеременная содержит правильный путь к вашей установке 7-zip.

xx77aBs
источник
Как вернуть это? У меня деинсталляция и переустановка не работали
Lombas
@Lombas, попробуйте снова связать 7-zip с этими расширениями, если это не работает, удалите ключи реестра и попробуйте снова.
xx77aBs
снова связать 7-zip с расширениями. Большое спасибо!
Ломбас
0

Передайте параметры как это:

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

Я припоминаю жалобы на то, что Windows 7 не позволяет напрямую редактировать действия с файлами. Я не знаю, правда ли это или нет ... но если это так, сохраните следующее как *.regфайл и импортируйте его.

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
источник
0

Вот файл .reg, который настраивает Извлечение в папку как поведение по умолчанию при двойном щелчке файлов с одним из следующих расширений - 7z / CAB / GZ / GZIP / RAR / TAR / ZIP. Вы можете сделать это для других расширений файлов, используя тот же подход. Я предпочитаю поведение Windows по умолчанию для монтирования ISO / VHD, поэтому я не изменил это, и 7-Zip поддерживает многие другие типы файлов, с которыми я обычно не сталкиваюсь, поэтому я не изменил их для них.

Вы можете отменить это, зайдя в 7-Zip File Manager, Инструменты, Параметры и изменив ассоциации файлов по своему усмотрению.

Я тестировал на Windows 10 x64 / 7-Zip 15.12 x64. Поскольку он использует C: \ Program Files для пути к 7-Zip, вам определенно нужна x64 Windows + x64 7-Zip, но я тестировал только на Windows 10.

У вас будут те же параметры щелчка правой кнопкой мыши, что и раньше, это только изменит то, что происходит при двойном щелчке, и только для этих семи типов файлов (опять же, вы можете сделать это для других типов файлов, используя тот же подход).

Если папка с таким именем уже существует, она выдаст ту же подсказку 7-Zip, которую вы обычно получаете, с вариантами Да / Да для всех / Автоматическое переименование / Нет / Нет для всех.

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
источник