Answers:
不幸的是,Afrazier的批处理程序方法不起作用。Windows不会像这样处理打开多个文件。当您尝试使用某个程序打开多个文件时,Windows不会打开该程序的单个实例并将文件作为多个参数传递给该实例。相反,Windows将打开程序的许多实例(与文件一样多的实例),并将一个文件传递给每个实例。如果您可以只使用%*并将一堆文件传递到单个.bat,并让.bat一次运行一次处理每个文件的循环,那就太好了,但是不幸的是,设置这些文件时只能使用%1注册表中的各种操作。
一个有空的人可以编写一个程序,该程序使用互斥对象来检查是否有另一个实例正在运行,如果存在,则将其文件传递给该实例然后关闭,然后原始实例会将该文件放到该实例上。在队列中处理完自己的文件后立即进入队列。批处理也可以使用tasklist
和find
来解决问题,但这并不像互斥锁那样好。
无论如何,请尝试使用此命令作为解压缩命令注册表值,以获取正确的文件夹名称:
"\path\to\7z.exe" x "%1" -o* -aou
这将在与源归档相同的目录中创建一个与源归档同名的新文件夹(不带文件扩展名)。
另外,我添加了此-aou
开关以自动避免文件名冲突(7z将在文件末尾附加一个数字,而不是提示您是否要覆盖或其他内容)。
"C:\Program Files\7-Zip\7zFM.exe" x "%1" -o* -aou
,从而改变7zFM只是7Z"C:\Program Files\7-Zip\7z.exe" x "%1" -o* -aou
由于答案相互矛盾,因此该线程变得有些混乱(花了我很多时间来找出哪种方法才是正确的解决方案),因此我认为总结Afrazier和Justin Roettger的帖子与我自己的帖子的结果相结合可能是个好主意经验:
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)所说的那样,我没有使用-aou代替7z,而是建议我最终使用7zG,因为如果您喜欢像使用普通上下文菜单提取那样,则可以选择覆盖。
而已!现在,通过双击将7z文件提取到具有自己名称的文件夹中。对于其他扩展名(如.rar和.zip),您需要针对相应的密钥重复这些步骤。(即HKEY_CLASSES_ROOT \ 7-Zip.rar和HKEY_CLASSES_ROOT \ 7-Zip.zip等)
哦,要澄清一下:它也适用于选择的多个文件。无需批处理文件。
C:\Program Files\7-Zip\7zG.exe x "%1" -o*
和瞧。
Tools -> Options...
菜单)中将至少一个文件与7-Zip关联后,我才看到路径。
安装ExtractNow。您可以将其配置为完全满足您的要求。
手动修改注册表,如下所示...
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 %*
所有注册表修改都未经内存测试,但应正确。
%~dpn1
可以在文件关联中使用?(它不在Windows XP中。而且,您忘记x
了扩展名。)
x
在输出文件夹名称中。至于它的工作原理,这是一个很好的问题。我将编辑以解决...
"C:\Program Files\7-Zip\7z.exe" x "%1" -o"%~dpn1"
我无法从运行cmd.exe
中获得任何好处,而且7-zip的默认打开也没有影响。但是,这只是解压缩到%~dpn1
与zip文件相同的文件夹中。将\"%1.d\"
在同一文件夹中的zip文件给出了\ filename.zip.d \子目录,所以它更接近,但不剥离的扩展。我试过两者的混合体,没有运气。还有其他建议吗?
这是我根据@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安装路径。
通过这样的参数:
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\""
这是一个.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\""
-o*
一点,但前提是存档中有多个文件?像这样,如果存档中只有一个文件或文件夹,我可以将其提取到当前目录吗?