7-zip 和 Windows 7:制作“提取到“默认双击

7-zip 和 Windows 7:制作“提取到“默认双击

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

另外,我可以尝试将参数传递到以下内容:

7z x <filename> -o<filename>

但是我不确定如何设置它(如何传递文件名参数,我可以直接执行此操作吗?还是我必须编写一个批处理文件并将文件名传递给它?我觉得后者非常不雅致,但无论如何都有效。

答案1

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

有空闲时间的人可以编写一个程序,使用互斥对象来检查是否有另一个实例已经在运行,如果是,则将其文件传递给该实例然后关闭,然后原始实例会将该文件放入队列中,并在处理完自己的文件后获取该文件。批处理也可以使用tasklist和来find完成,但这不如互斥对象那么好。

无论如何,请尝试对提取命令注册表值执行此操作以获取正确的文件夹名称:

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

这将在与源档案相同的目录中创建一个新文件夹,其名称与源档案相同(不带文件扩展名)。

另外,我添加了-aou开关以自动避免文件名冲突(7z 会在文件末尾附加一个数字,而不是提示您是否要覆盖或其他操作)。

答案2

这个帖子因为答案相互矛盾而变得有点混乱(我花了很长时间才弄清楚哪个是正确的解决方案)所以我认为结合我自己的经验总结一下 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. extract在named下创建一个新的子键command
  8. (Default)将键的值设置command为:

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

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

我没有像 Justin Roettger 建议的那样使用 7z 和 -aou,而是最终使用了 7zG,因为这样您可以选择覆盖,就像使用普通上下文菜单提取一样。

就是这样!现在双击即可将 7z 文件提取到具有自己名称的文件夹中。对于其他扩展名(如 .rar 和 .zip),您需要对相应的键重复这些步骤。(即 HKEY_CLASSES_ROOT\7-Zip.rar 和 HKEY_CLASSES_ROOT\7-Zip.zip 等)

哦,澄清一下:它也适用于选择多个文件的情况。不需要批处理文件。

答案3

简单的方法

安装立即提取。您可以对其进行配置,以执行您想要的操作。


艰难之路

手动修改注册表如下...

  • regedit以管理员身份启动

  • 打开HKCR\.7z并查看(Default)值。记下它是什么(就我而言,作为 PowerArchiver 用户,它是PASZIP

  • 转到HKCR名为该名称的注册表项。(就我而言HKCR\PASZIP

  • 在此项下,展开Shell子项

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

  • 创建一个名为extract

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

  • extract在named下创建一个新的子键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\ClassesHKCU\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 %*

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

答案4

传递参数如下:

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

相关内容