7-zip和Windows 7:双击默认为“提取到<文件夹>”


15

我正在尝试找到一种方法,使您可以从上下文菜单中执行<folder_same_as_file_name>操作,即双击文件而不是简单地启动7-zip时,将其“提取为”默认操作。有没有简单的方法可以做到这一点?

或者,我可以尝试将参数传递给以下内容:

7z x <filename> -o<filename>

但是我不确定如何设置(如何传递filename参数,我可以直接执行此操作,还是必须写一个批处理文件并将其传递给文件名?后者令人烦恼,但没有意思,但是无论如何。

Answers:


4

不幸的是,Afrazier的批处理程序方法不起作用。Windows不会像这样处理打开多个文件。当您尝试使用某个程序打开多个文件时,Windows不会打开该程序的单个实例并将文件作为多个参数传递给该实例。相反,Windows将打开程序的许多实例(与文件一样多的实例),并将一个文件传递给每个实例。如果您可以只使用%*并将一堆文件传递到单个.bat,并让.bat一次运行一次处理每个文件的循环,那就太好了,但是不幸的是,设置这些文件时只能使用%1注册表中的各种操作。

一个有空的人可以编写一个程序,该程序使用互斥对象来检查是否有另一个实例正在运行,如果存在,则将其文件传递给该实例然后关闭,然后原始实例会将该文件放到该实例上。在队列中处理完自己的文件后立即进入队列。批处理也可以使用tasklistfind来解决问题,但这并不像互斥锁那样好。

无论如何,请尝试使用此命令作为解压缩命令注册表值,以获取正确的文件夹名称:

"\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和Justin Roettger的帖子与我自己的帖子的结果相结合可能是个好主意经验:

  1. 以管理员身份启动regedit
  2. 打开 HKEY_CLASSES_ROOT\7-Zip.7z
  3. 在该键下,展开Shell子键
  4. (Default)值设置为字符串extract
  5. 创建一个名为的新子项 extract
  6. 将密钥的(Default)值设置extractExtract to Folder
  7. extractnamed 下创建一个新的子项command
  8. 将密钥的(Default)值设置command为:

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

(您可能需要对此进行调整以匹配7-Zip安装的路径)

就像贾斯汀·罗特格(Justin Roettger)所说的那样,我没有使用-aou代替7z,而是建议我最终使用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*和瞧。
neokio

在Windows 10上,直到在7-Zip文件管理器(通过Tools -> Options...菜单)中将至少一个文件与7-Zip关联后,我才看到路径。
克里斯·诺莱特

有人知道为什么Windows 10上不再可以使用它吗?路径似乎相同,但是我只得到一个黑色的控制台窗口,该窗口立即关闭,并且未提取任何内容。尝试了该线程中的所有方法。
瑞安·魏斯

5

简单的方法

安装ExtractNow。您可以将其配置为完全满足您的要求。


艰难的道路

手动修改注册表,如下所示...

  • regedit以管理员身份开始

  • 打开HKCR\.7z并查看(Default)值。注意这是什么(在我的情况下,作为PowerArchiver用户,它是PASZIP

  • 转到该名称中的注册表项HKCR。(以我为例HKCR\PASZIP

  • 在该键下,展开Shell子键

  • (Default)值设置为字符串extract

  • 创建一个名为的新子项 extract

  • 将密钥的(Default)值设置extractExtract to Folder

  • extractnamed 下创建一个新的子项command

  • 将键的(Default)值设置command

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

    (您可能需要调整路径)

感谢Justin Roettger指出了为此所需的正确名称变量。

就是这样。现在,双击可将7z文件提取到具有自己名称的文件夹中。对于其他扩展名(如.rar和.zip),您需要针对相应的密钥重复此步骤。

如果只想在用户帐户而不是系统范围内进行更改,请修改HKCU\Software\Classes而不是HKCRHKCR是这是一个联合的虚拟键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)值设置commandC:\Path\To\File.bat %*

所有注册表修改都未经内存测试,但应正确。


是否%~dpn1可以在文件关联中使用?(它不在Windows XP中。而且,您忘记x了扩展名。)
user1686 2011年

1
@grawity:您不需要x在输出文件夹名称中。至于它的工作原理,这是一个很好的问题。我将编辑以解决...
afrazier

嗯,好点。
user1686 2011年

这么近,但还不算很远。在玩完提供的代码后,我设置了默认键值,因为"C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1" 我无法从运行cmd.exe中获得任何好处,而且7-zip的默认打开也没有影响。但是,这只是解压缩到%~dpn1与zip文件相同的文件夹中。将\"%1.d\"在同一文件夹中的zip文件给出了\ filename.zip.d \子目录,所以它更接近,但不剥离的扩展。我试过两者的混合体,没有运气。还有其他建议吗?
schodge 2011年

您可能必须使用批处理文件。
afrazier 2011年

2

这是我根据@haiggoh的答案编写的PowerShell脚本。在运行它之前,需要打开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

@Lombas尝试将7-zip与这些扩展名再次关联,如果不起作用,请删除注册表项,然后重试。
xx77aB

再次将7-zip与扩展名相关联。非常感谢你!
隆巴斯'17

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文件管理器,工具,选项来还原此文件,并根据需要更改文件关联。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.