7-zip i Windows 7: Ustaw dwukrotnie opcję „Wypakuj do <folderu>” po dwukrotnym kliknięciu

15

Próbuję znaleźć sposób na wykonanie akcji, którą można wykonać z menu kontekstowego, „Wypakuj do <folder_same_as_file_name>” domyślnej akcji po dwukrotnym kliknięciu pliku zamiast po prostu uruchomieniu 7-zip. Czy istnieje prosty sposób to zrobić?

Alternatywnie, rozumiem, że mógłbym spróbować przekazać parametry w następujący sposób:

7z x <filename> -o<filename>

Ale nie jestem pewien, jak to ustawić (jak przekazać parametr nazwy pliku, i czy mogę to zrobić bezpośrednio, czy też będę musiał zamiast tego napisać plik wsadowy i przekazać nazwę pliku? To ostatnie uważam za irytujące nieeleganckie, ale cokolwiek działa.

schodge
źródło

Odpowiedzi:

4

Niestety metoda programu wsadowego afraziera nie działa; System Windows nie obsługuje otwierania wielu takich plików. Podczas próby otwarcia wielu plików za pomocą programu system Windows nie otwiera ani jednej instancji programu, ani nie przekazuje plików jako wielu argumentów do tej jednej instancji. Zamiast tego system Windows otwiera wiele instancji programu (tyle instancji, ile jest plików), przekazując jeden plik do każdej instancji. Byłoby miło, gdybyś mógł po prostu użyć% * i przekazać kilka plików do pojedynczego pliku .bat, i pozwolić, aby .bat uruchomił pętlę przetwarzającą każdy plik po jednym, ale niestety możesz użyć% 1 podczas ustawiania tych plików rodzaje działań w rejestrze.

Ktoś, kto ma trochę czasu, może napisać program, który używa obiektu mutex, aby sprawdzić, czy jest już uruchomiona inna instancja, a jeśli tak, przekazać jej plik do tej instancji, a następnie zamknąć, po czym instancja oryginalna umieści ten plik w kolejce i przejdź do niego po zakończeniu przetwarzania własnego pliku. partia może załatwić sprawę, używając, tasklisti find, ale to nie jest tak dobre rozwiązanie jak mutex.

W każdym razie wypróbuj to dla wartości rejestru polecenia wyodrębnienia, aby uzyskać właściwą nazwę folderu:

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

Spowoduje to utworzenie nowego folderu w tym samym katalogu co archiwum źródłowe o tej samej nazwie co archiwum źródłowe (bez rozszerzenia pliku).

Dodałem również -aouprzełącznik, aby automatycznie unikać konfliktów nazw plików (7z doda liczbę na końcu pliku, zamiast tego pytając, czy chcesz zastąpić czy cokolwiek innego).

Justin Roettger
źródło
Czy istnieje sposób, aby to zrobić -o*, ale tylko wtedy, gdy w archiwum jest więcej niż jeden plik? Czy mogę zmusić go do wypakowania do bieżącego katalogu, jeśli w archiwum jest tylko jeden plik lub folder?
NightExcessive
Domyślnie w Windows 10 jest "C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aouzmiana 7zFM na 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
jsherk
12

Ten wątek stał się nieco mylący z powodu sprzecznych odpowiedzi (zajęło mi sporo czasu, aby dowiedzieć się, które było właściwym rozwiązaniem), więc pomyślałem, że dobrym pomysłem może być podsumowanie wyników z postów afraziera i Justina Roettgera połączonych z moimi własnymi doświadczenie:

  1. Uruchom regedit jako administrator
  2. otwarty HKEY_CLASSES_ROOT\7-Zip.7z
  3. Pod tym kluczem rozwiń Shellpodklucz
  4. Ustaw (Default)wartość na łańcuchextract
  5. Utwórz nowy podklucz o nazwie extract
  6. Ustaw (Default)wartość extractklucza naExtract to Folder
  7. Utwórz nowy podklucz pod extractnazwącommand
  8. Ustaw (Default)wartość commandklucza na:

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

(może być konieczne dostosowanie tego do ścieżki instalacji 7-Zip)

Zamiast 7z z opcją -aou jak Justin Roettger zasugerowałem, że skończyłem z użyciem 7zG, ponieważ w ten sposób możesz wybrać nadpisanie, jeśli chcesz po prostu wypakować z normalnym menu kontekstowym.

Otóż ​​to! Pliki 7z są teraz wyodrębniane do folderu o własnej nazwie poprzez podwójne kliknięcie. W przypadku innych rozszerzeń, takich jak .rar i .zip, musisz powtórzyć te kroki dla odpowiednich kluczy. (tj. HKEY_CLASSES_ROOT \ 7-Zip.rar i HKEY_CLASSES_ROOT \ 7-Zip.zip i tak dalej)

Aha i wyjaśnienie: Działa również z wybranymi wieloma plikami. Nie potrzeba pliku wsadowego.

haiggoh
źródło
1
Nie widzę tej ścieżki rejestru. Jestem na Windows 8 z 64-bitowym 7zip.
phillipwei
Wiele się zmieniło od tego postu, ale nadal działa świetnie ... dla mnie było poniżej 7z_auto_file, a nie 7-Zip.7z. Wszystko, co zrobiłem, to zmieniłem istniejące „polecenie” na C:\Program Files\7-Zip\7zG.exe x "%1" -o*i voila.
neokio
W systemie Windows 10 również nie widziałem ścieżki, dopóki nie skojarzyłem przynajmniej jednego pliku z 7-Zip w Menedżerze plików 7-Zip (poprzez Tools -> Options...menu).
Chris Nolet
Czy ktoś wie, dlaczego to już nie działa w systemie Windows 10? Ścieżki wydają się takie same, ale dostaję czarne okno konsoli, które natychmiast się zamyka i nic nie jest wyodrębniane. Próbowałem wszystkich metod w tym wątku.
Ryan Weiss
5

Łatwa droga

Zainstaluj ExtractNow . Możesz go skonfigurować tak, aby robił dokładnie to, co chcesz.


Trudna droga

Ręczna modyfikacja rejestru w następujący sposób ...

  • Zacznij regeditjako administrator

  • Otwórz HKCR\.7zi spójrz na (Default)wartość. Zwróć uwagę na to, co to jest (w moim przypadku jako użytkownik PowerArchiver to PASZIP)

  • Przejdź do klucza rejestru HKCRo nazwie o tej nazwie. (w moim przypadku HKCR\PASZIP)

  • Pod tym kluczem rozwiń Shellpodklucz

  • Ustaw (Default)wartość na łańcuchextract

  • Utwórz nowy podklucz o nazwie extract

  • Ustaw (Default)wartość extractklucza naExtract to Folder

  • Utwórz nowy podklucz pod extractnazwącommand

  • Ustaw (Default)wartość commandklucza na

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

    (może być konieczne dostosowanie ścieżki)

Podziękowania dla Justina Roettgera za wskazanie poprawnej zmiennej nazwy potrzebnej do tego.

To powinno być to. Teraz pliki 7z są wyodrębniane do folderu o własnej nazwie podwójnym kliknięciem. W przypadku innych rozszerzeń, takich jak .rar i .zip, musisz powtórzyć te kroki dla odpowiednich kluczy.

Jeśli chcesz tylko wprowadzić zmiany na swoim koncie użytkownika zamiast całego systemu, zmień HKCU\Software\Classeszamiast HKCR. HKCRto klucz wirtualny będący połączeniem HKLM\Software\Classesi w HKCU\Software\Classesktórym dane na Twoim koncie (HKCU) zastępują dane systemowe (HKLM). Zwykle uruchamianie programu regedit jako Administrator oznacza, że ​​modyfikowanie HKCR zmienia dane systemowe w HKLM.


Wyodrębnianie wielu plików

Oczywiście to nie zadziała, jeśli wybrano wiele plików. Jeśli chcesz, aby to działało, musisz utworzyć następujący plik wsadowy:

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

Teraz postępuj zgodnie z instrukcjami powyżej. W ostatnim kroku ustaw (Default)wartość commandklucza naC:\Path\To\File.bat %*

Wszystkie modyfikacje rejestru nie są testowane z pamięci, ale powinny być poprawne.

afrazier
źródło
Czy %~dpn1działa w skojarzeniach plików? (Nie ma go w systemie Windows XP. Zapomniałeś również xo rozszerzeniu.)
user1686,
1
@grawity: Nie chcesz xnazwy folderu wyjściowego. Jeśli chodzi o działanie ... To dobre pytanie.
Przeredaguję,
Hm, dobra uwaga.
user1686,
Tak blisko, ale jeszcze nie do końca. Po zabawie z kodem zarówno afrazier, jak i grawitacyjnym, mam ustawioną domyślną wartość klucza, ponieważ "C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" nie dostałem żadnej korzyści z biegania cmd.exe, którą mogłem powiedzieć, a domyślne otwarcie 7-zip nie przeszkadzało. Jednak jest to po prostu rozpakowywanie %~dpn1w tym samym folderze, co plik zip. \"%1.d\"Daje \ filename.zip.d \ podkatalog w tym samym folderze co plik zip, więc jest bliżej, ale nie zdzierając rozszerzenia. Próbowałem hybryd tych dwóch, bez powodzenia. Jakieś inne sugestie?
schodge
Prawdopodobnie będziesz musiał użyć pliku wsadowego.
afrazier
2

Oto skrypt PowerShell, który napisałem na podstawie odpowiedzi @ haiggoh. Zanim go uruchomisz, musisz otworzyć 7-zip, przejść do Narzędzia-> Opcje i powiązać 7-zip z pożądanymi rozszerzeniami plików. Następnie uruchom następujący skrypt PowerShell (z uprawnieniami administratora):

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

Oczywiście upewnij się, że $7zInstallationFolderzmienna zawiera poprawną ścieżkę do instalacji 7-zip.

xx77aBs
źródło
Jak to cofnąć? Odinstalowanie i ponowna instalacja nie działały
Lombas
@Lombas spróbuj ponownie skojarzyć 7-zip z tymi rozszerzeniami, jeśli nie działa, usuń klucze rejestru i spróbuj ponownie.
xx77aBs
skojarzenie 7-zip ponownie z działającymi rozszerzeniami. Dziękuję Ci bardzo!
Lombas
0

Przekaż parametry takie jak to:

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

Pamiętam skargi na Windows 7, które nie pozwalają na bezpośrednią edycję działań na plikach. Nie wiem, czy to prawda, czy nie ... ale jeśli tak, zapisz następujące jako *.regplik i zaimportuj.

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\""
użytkownik1686
źródło
0

Oto plik .reg, który konfiguruje Rozpakuj do folderu jako domyślne zachowanie po dwukrotnym kliknięciu plików z jednym z następujących rozszerzeń - 7z / CAB / GZ / GZIP / RAR / TAR / ZIP. Możesz to zrobić dla innych rozszerzeń plików, stosując to samo podejście. Wolę domyślne zachowanie systemu Windows w przypadku montażu ISO / VHD, więc nie zmieniłem tego, a 7-Zip obsługuje wiele innych typów plików, z którymi zwykle się nie spotykam, więc nie zmieniłem tego.

Możesz to cofnąć, przechodząc do Menedżera plików 7-Zip, Narzędzia, Opcje i odpowiednio zmieniając powiązania plików.

Testowałem na Windows 10 x64 / 7-Zip 15,12 x64. Ponieważ używa ścieżki C: \ Program Files jako ścieżki do 7-Zip, zdecydowanie potrzebujesz x64 Windows + x64 7-Zip, ale testowałem tylko na Windows 10.

Będziesz mieć takie same opcje kliknięcia prawym przyciskiem jak poprzednio, zmienia to tylko to, co dzieje się po dwukrotnym kliknięciu, i tylko dla tych siedmiu typów plików (ponownie, możesz to zrobić dla innych typów plików przy użyciu tego samego podejścia).

Jeśli istnieje już folder o tej nazwie, otrzymasz taki sam monit 7-Zip, jak zwykle, z opcjami Tak / Tak na wszystkie / Automatyczna zmiana nazwy / Nie / Nie dla wszystkich.

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
źródło