14

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

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

7z x <filename> -o<filename>

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

6 ответов6

11

Эта тема стала немного запутанной из-за противоречивых ответов (мне потребовалось довольно много времени, чтобы выяснить, какое решение было правильным), поэтому я подумал, что будет хорошей идеей обобщить результаты постов 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 и т. д.)

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

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 %*

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

4

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

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

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

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

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

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

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 установке.

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\""
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\""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .