7-zip та Windows 7: подвійним клацанням клацніть параметр "Витягнути до <папки>"


15

Я намагаюся знайти спосіб зробити дії, які ви можете виконати, з контекстного меню "Витягнути до <folder_same_as_file_name>" дії за замовчуванням, коли двічі клацніть файл, а не просто запускаєте 7-zip. Чи є простий спосіб це зробити?

Як альтернатива, я можу спробувати передати параметри в наступне:

7z x <filename> -o<filename>

Але я не впевнений, як це налаштувати (як передати параметр імені файлу, і чи можу я це зробити безпосередньо, чи доведеться замість цього написати пакетний файл і передати ім’я файлу? Останнє мені здається неприємним не елегантним, але що б не працювало.

Відповіді:


4

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

Хтось із деяким часом у своїх руках може написати програму, яка використовує об'єкт mutex, щоб перевірити, чи є вже запущений інший екземпляр, і якщо є, передати його файл цьому екземпляру, а потім закрити, після чого оригінальний екземпляр помістить цей файл у черзі та дістатися до неї, як тільки буде виконано обробку власного файлу. партія може зробити трюк, використовуючи tasklistі findтеж, але це не так добре рішення, як мютекс.

У будь-якому випадку, спробуйте це для значення вашого реєстру витягних команд, щоб отримати правильну назву папки:

"\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 з -aou, як запропонував Джастін Реттгер, я в кінцевому підсумку використовував 7zG, тому що таким чином ви можете вибрати перезапис, якщо вам подобається просто вилучення з звичайного контекстного меню.

Це воно! Тепер файли 7z витягуються у папку з власним іменем подвійним клацанням миші. Для інших розширень, таких як .rar та .zip, вам потрібно повторити ці кроки відповідно до клавіш. (тобто HKEY_CLASSES_ROOT \ 7-Zip.rar і ​​HKEY_CLASSES_ROOT \ 7-Zip.zip тощо)

Ну і для уточнення: вона також працює з декількома вибраними файлами. Не потрібно пакетного файлу.


1
Я не бачу цього шляху до реєстру. Я в Windows 8 w / 64-розрядний 7zip.
phillipwei

Багато змінилося після цієї публікації, але вона все ще чудово працює ... для мене це було під 7z_auto_file, а не 7-Zip.7z. Все, що я зробив, - це змінити існуючу "команду" на " C:\Program Files\7-Zip\7zG.exe x "%1" -o*і" вуаля.
неокіо

У Windows 10 я також не бачив шлях, поки я не пов’язав принаймні один файл із 7-Zip в 7-Zip File Manager (через 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 %*

Всі зміни реєстру не перевірені з пам'яті, але повинні бути правильними.


Чи %~dpn1працює у файлових асоціаціях? (Це не в Windows XP. Крім того, ви забули xпро розширення.)
user1686

1
@grawity: не потрібно вводити ім'я xу вихідній папці. Що стосується роботи ... Це гарне питання. Я редагую на адресу ...
afrazier

Гм, хороший пункт.
користувач1686

Так близько, але ще не зовсім там. Після гри з кодом, наданим як 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, так що ближче, але не вирізують розширення. Я спробував гібриди двох, не пощастило. Будь-які інші пропозиції?
schodge

Можливо, вам доведеться використовувати пакетний файл.
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.


Як повернути його? Видалення та перевстановлення не вдалося
Ломбас

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

0

Тут є. Ви можете зробити це для інших розширень файлів, використовуючи той самий підхід. Я віддаю перевагу поведінці Windows за замовчуванням для монтажу ISO / VHD, тому я цього не змінював, а 7-Zip підтримує безліч інших типів файлів, з якими я не зустрічаюсь, тому я не змінював їх.

Ви можете відновити це, перейшовши в 7-Zip File Manager, інструменти, параметри та змінивши асоціації файлів за бажанням.

Я тестував на Windows 10 x64 / 7-Zip 15.12 x64. Оскільки він використовує програмні файли C: \ для шляху до 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\""

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.