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 tasklist
e find
també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 -aou
opçã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).
-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?"C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aou
assim mudar o 7zFM apenas 7z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
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:
HKEY_CLASSES_ROOT\7-Zip.7z
Shell
subchave(Default)
valor para a sequênciaextract
extract
(Default)
valor daextract
chave comoExtract to Folder
extract
nomecommand
(Default)
valor dacommand
chave para:(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.
fonte
C:\Program Files\7-Zip\7zG.exe x "%1" -o*
e pronto.Tools -> Options...
menu).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
regedit
como administradorAbra
HKCR\.7z
e observe o(Default)
valor. Anote o que é isso (no meu caso, como usuário do PowerArchiver, éPASZIP
)Vá para a chave do registro
HKCR
nomeada que. (no meu casoHKCR\PASZIP
)Sob essa chave, expanda a
Shell
subchaveDefina o
(Default)
valor para a sequênciaextract
Crie uma nova subchave denominada
extract
Defina o
(Default)
valor daextract
chave comoExtract to Folder
Crie uma nova subchave com o
extract
nomecommand
Defina o
(Default)
valor dacommand
chave como(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\Classes
vez deHKCR
.HKCR
é uma chave virtual que é uma uniãoHKLM\Software\Classes
eHKCU\Software\Classes
onde 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:
Agora, siga as instruções acima. Na última etapa, defina o
(Default)
valor dacommand
chave comoC:\Path\To\File.bat %*
Todas as modificações do registro não foram testadas da memória, mas devem estar corretas.
fonte
%~dpn1
em associações de arquivos? (Isso não ocorre no Windows XP. Além disso, você esqueceux
a extensão.) #x
nome da pasta de saída. Quanto ao funcionamento ... Essa é uma boa pergunta. Eu vou editar para resolver ..."C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1"
não estava obtendo nenhum benefício da execuçãocmd.exe
que eu poderia dizer, e a abertura padrão do 7-zip não se incomodou com isso. No entanto, isso é apenas descompactar%~dpn1
na 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?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):
Obviamente, verifique se a
$7zInstallationFolder
variável contém o caminho correto para a instalação do 7-zip.fonte
Passe parâmetros como este:
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
*.reg
arquivo e importe-o.fonte
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.
fonte