7-zip e Windows 7: torne "Extrair para <pasta>" o padrão ao clicar duas vezes

15

Estou tentando encontrar uma maneira de executar a ação que você pode executar no menu de contexto, "Extrair para <folder_same_as_file_name>" a ação padrão ao clicar duas vezes no arquivo em vez de simplesmente iniciar o 7-zip. Existe uma maneira simples de fazer isso?

Como alternativa, acho que poderia tentar passar parâmetros para o seguinte:

7z x <filename> -o<filename>

Mas não tenho certeza de como configurá-lo (como passar o parâmetro filename, e posso fazer isso diretamente ou terei que gravar um arquivo em lotes e passar o nome do arquivo para ele? o que funcionar.

esquivar
fonte

Respostas:

4

Infelizmente, o método de programa em lote do afrazier não funciona; O Windows não consegue abrir vários arquivos como esse. Quando você tenta abrir vários arquivos com um programa, o Windows não abre uma única instância do programa e passa os arquivos como vários argumentos para essa instância. Em vez disso, o Windows abre muitas instâncias do programa (quantas instâncias houver arquivos), passando um arquivo para cada instância. Seria bom se você pudesse usar% * e passar um monte de arquivos para um único .bat, e fazer com que .bat execute um loop processando cada arquivo um por vez, mas, infelizmente, você só pode usar% 1 ao defini-los tipos de ações no registro.

Alguém com algum tempo disponível pode escrever um programa que usa um objeto mutex para verificar se já existe outra instância em execução e, se houver, para passar o arquivo para essa instância e depois fechar, em que a instância original colocará esse arquivo em uma fila e chegue a ela assim que terminar de processar seu próprio arquivo. um lote pode fazer o truque usando taskliste findtambém, mas isso não é uma solução tão boa quanto o mutex.

De qualquer forma, tente isso para obter o valor do registro do comando extrair para obter o nome da pasta correta:

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

Isso criará uma nova pasta no mesmo diretório que o arquivo de origem com o mesmo nome que o arquivo de origem (sem a extensão do arquivo).

Além disso, adicionei a -aouopção para evitar automaticamente conflitos de nome de arquivo (o 7z acrescentará um número ao final de um arquivo, em vez disso, perguntando se você deseja substituir ou o que for).

Justin Roettger
fonte
Existe uma maneira de fazer o que -o*faz, mas apenas se houver mais de um arquivo no arquivo morto? Como em, posso fazê-lo extrair para o diretório atual se houver apenas um arquivo ou pasta no arquivo morto?
NightExcessive
Padrão no Windows 10 é "C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aouassim mudar o 7zFM apenas 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
jsherk
12

Esse tópico se tornou um pouco confuso por causa de respostas contraditórias (demorei algum tempo para descobrir qual era a solução certa), então achei que seria uma boa ideia resumir os resultados dos posts de afrazier e Justin Roettger combinados com os meus. experiências:

  1. Inicie o regedit como administrador
  2. Aberto HKEY_CLASSES_ROOT\7-Zip.7z
  3. Sob essa chave, expanda a Shellsubchave
  4. Defina o (Default)valor para a sequênciaextract
  5. Crie uma nova subchave denominada extract
  6. Defina o (Default)valor da extractchave comoExtract to Folder
  7. Crie uma nova subchave com o extractnomecommand
  8. Defina o (Default)valor da commandchave para:

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

(pode ser necessário ajustar isso para corresponder ao caminho da sua instalação do 7-Zip)

Em vez de 7z com -aou como Justin Roettger sugeriu que eu acabasse usando 7zG, porque dessa forma você pode substituir se quiser apenas extrair com o menu de contexto normal.

É isso aí! Os arquivos 7z agora são extraídos para uma pasta com seu próprio nome, clicando duas vezes. Para outras extensões como .rar e .zip, você precisa repetir essas etapas para as teclas correspondentes. (ou seja, HKEY_CLASSES_ROOT \ 7-Zip.rar e HKEY_CLASSES_ROOT \ 7-Zip.zip e assim por diante)

Ah, e para esclarecer: ele funciona com vários arquivos selecionados também. Não é necessário arquivo em lote.

haiggoh
fonte
1
Não vejo esse caminho do registro. Estou no Windows 8 com 7-zip de 64 bits.
Phillipwei
Muita coisa mudou desde este post, mas ainda funciona muito bem ... para mim, estava sob 7z_auto_file, não 7-Zip.7z. Tudo o que fiz foi mudar o "comando" existente para C:\Program Files\7-Zip\7zG.exe x "%1" -o*e pronto.
Neokio
No Windows 10, também não vi o caminho até associar pelo menos um arquivo ao 7-Zip no 7-Zip File Manager (via Tools -> Options...menu).
Chris Nolet
Alguém sabe por que isso não funciona mais no Windows 10? Os caminhos parecem os mesmos, mas recebo uma janela preta do console que fecha imediatamente e nada é extraído. Tentei todos os métodos neste segmento.
Ryan Weiss
5

O caminho fácil

Instale o ExtractNow . Você pode configurá-lo para fazer exatamente o que deseja.


O jeito difícil

Modificação manual do registro da seguinte maneira ...

  • Iniciar regeditcomo administrador

  • Abra HKCR\.7ze observe o (Default)valor. Anote o que é isso (no meu caso, como usuário do PowerArchiver, é PASZIP)

  • Vá para a chave do registro HKCRnomeada que. (no meu caso HKCR\PASZIP)

  • Sob essa chave, expanda a Shellsubchave

  • Defina o (Default)valor para a sequênciaextract

  • Crie uma nova subchave denominada extract

  • Defina o (Default)valor da extractchave comoExtract to Folder

  • Crie uma nova subchave com o extractnomecommand

  • Defina o (Default)valor da commandchave como

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

    (pode ser necessário ajustar o caminho)

Agradecemos a Justin Roettger por apontar a variável de nome correta necessária para isso.

Deve ser isso. Agora, os arquivos 7z são extraídos para uma pasta com seu próprio nome, clicando duas vezes. Para outras extensões como .rar e .zip, você precisa repetir essas etapas para as teclas correspondentes.

Se você deseja apenas fazer alterações na sua conta de usuário em vez de em todo o sistema, modifique em HKCU\Software\Classesvez de HKCR. HKCRé uma chave virtual que é uma união HKLM\Software\Classese HKCU\Software\Classesonde os dados da sua conta (HKCU) substituem os dados do sistema (HKLM). Normalmente, executar o regedit como administrador significa que modificar o HKCR altera os dados de todo o sistema no HKLM.


Extraindo vários arquivos

Obviamente, isso não funcionará se você tiver vários arquivos selecionados. Se você deseja que isso funcione, é necessário criar o seguinte arquivo em lotes:

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

Agora, siga as instruções acima. Na última etapa, defina o (Default)valor da commandchave comoC:\Path\To\File.bat %*

Todas as modificações do registro não foram testadas da memória, mas devem estar corretas.

afrazier
fonte
Funciona %~dpn1em associações de arquivos? (Isso não ocorre no Windows XP. Além disso, você esqueceu xa extensão.) #
User1686 18/11/11
1
@rawity: Você não quer o xnome da pasta de saída. Quanto ao funcionamento ... Essa é uma boa pergunta. Eu vou editar para resolver ...
afrazier 18/03/11
Hum, bom argumento.
user1686
Tão perto, mas ainda não está lá. Depois de jogar com o código fornecido por afrazier e grawity, eu tenho o valor da chave padrão definido, pois "C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" não estava obtendo nenhum benefício da execução cmd.exeque eu poderia dizer, e a abertura padrão do 7-zip não se incomodou com isso. No entanto, isso é apenas descompactar %~dpn1na mesma pasta que o arquivo zip. Ele \"%1.d\"fornece um subdiretório \ filename.zip.d \ na mesma pasta que o arquivo zip; portanto, é mais próximo, mas não retira a extensão. Eu tentei híbridos dos dois, sem sorte. Alguma outra sugestão?
schodge
Você provavelmente precisará usar um arquivo em lotes.
afrazier
2

Aqui está o script do PowerShell que escrevi com base na resposta da @ haiggoh. Antes de executá-lo, você precisa abrir o 7-zip, vá em Ferramentas-> Opções e associe o 7-zip às extensões de arquivo desejadas. Depois disso, execute o seguinte script do PowerShell (com direitos de administrador):

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

Obviamente, verifique se a $7zInstallationFoldervariável contém o caminho correto para a instalação do 7-zip.

xx77aBs
fonte
Como reverter isso? I desinstalar e reinstalar não funcionou
Lombas
@Lombas tente associar o 7-zip novamente a essas extensões, se não funcionar, remova as chaves do registro e tente novamente.
xx77aBs
associando 7-zip novamente com as extensões funcionadas. Muito obrigado!
Lombas
0

Passe parâmetros como este:

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

Lembro-me de ouvir queixas sobre o Windows 7 não permitir editar diretamente as ações do arquivo. Não sei se isso é verdade ou não ... mas se for, salve o seguinte como um *.regarquivo e importe-o.

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
fonte
0

Aqui está um arquivo .reg que configura Extrair para pasta como o comportamento padrão ao clicar duas vezes em arquivos com uma das seguintes extensões - 7z / CAB / GZ / GZIP / RAR / TAR / ZIP. Você poderia fazer isso para outras extensões de arquivo usando a mesma abordagem. Eu prefiro o comportamento padrão do Windows para montagem ISO / VHD, por isso não mudei isso, e o 7-Zip suporta muitos outros tipos de arquivos que eu normalmente não encontro, então não mudei para eles.

Você pode reverter isso acessando o 7-Zip File Manager, Ferramentas, Opções e altere as associações de arquivos conforme desejado.

Eu testei no Windows 10 x64 / 7-Zip 15.12 x64. Como ele usa C: \ Arquivos de Programas para o caminho para o 7-Zip, você definitivamente precisa de x64 Windows + x64 7-Zip, mas só testei no Windows 10.

Você terá as mesmas opções de clique com o botão direito do que antes, isso só muda o que acontece quando você clica duas vezes e apenas para esses sete tipos de arquivos (novamente, você pode fazer isso para outros tipos de arquivos usando a mesma abordagem).

Se já houver uma pasta com esse nome, ele fornecerá o mesmo prompt 7-Zip que você recebe normalmente, com opções para Sim / Sim para todos / Renomear automaticamente / Não / Não para todos.

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
fonte