我正在尝试找到一种方法,让您可以从上下文菜单中执行的操作“提取到<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 的帖子的结果可能是个好主意:
- 以管理员身份启动 regedit
- 打开
HKEY_CLASSES_ROOT\7-Zip.7z
- 在此项下,展开
Shell
子项 - 将值设置
(Default)
为字符串extract
- 创建一个名为
extract
(Default)
将键的值设置extract
为Extract to Folder
extract
在named下创建一个新的子键command
(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)
将键的值设置extract
为Extract 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
而不是HKCR
。 HKCR
是一个虚拟键,它是 和 的并集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)
的值设置command
为C:\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\""