如何将压缩包从 dir/subdir/*.* 提取到 dir/%zipname%/
How to extract archives from dir/subdir/*.* to dir/%zipname%/
我有一堆档案要提取。问题是,它们有很多,而且有很多信息要四处移动。我想一次性搞定。研究可能比手动做要花更多的时间,但研究更有趣。
TL;DR:希望使用 7-zip 命令行帮助将多个档案提取到它们自己的目录中。如果您感觉特别有帮助,Autohotkey、Powershell 和批处理文件的答案也很好。
Win10,最新更新等等。我一直在使用 7-zip,所以如果有更好的提取器,这可能是一个有用的建议。我有一点编码经验,所以我通常可以解析一个例子并将其应用到我的项目中,但我不能自己想出代码。因此,我很乐意使用 cmd、autohotkey、powershell、batch files,还有一些其他的,但我需要一个例子才能做任何事情。哈哈
所以,在我的研究中,我发现
(7z x -o"...\Stellaris\mod\Examples\" "...\content1990\*")
对于 cmd,这是有效的,除了将所有内容提取到同一目录,因为存档文件位于根存档目录中(我认为这就是原因;如果它们是一个文件夹,它应该可以工作就像我想要的那样吗?)。我不 认为 您可以在路径中使用环境变量 (?)。不确定是什么让它在这里工作...
Powershell:我最近才开始修改它,所以我发现的那个脚本对我来说没有任何意义。并且从未发现有人为此使用 AutoHotKey。
最后是一个**批处理文件*,我发现 似乎最接近(通常我会评论那个线程,因为显然它仍然处于活动状态,但我没有 50 个代表),但是我不确定如何根据我的目的修改它:
@echo 关闭
设置"filename=%~1"#Where does the working dir path go?
SET dirName=%文件名:~0,-4%#How/where would you put in wildcards?
7z x -o"%dirName%" "%filename%"
我不介意使用任何方法,但我可能更喜欢 AHK?我可能在那里最有经验。
如果你做到了这一步,哇,我印象深刻!我希望它足够连贯以便理解(可能一开始不是?)。也许有点有趣? 我觉得我很有趣。让我知道我是否应该为将来添加或删除任何内容。我知道这可能是太多的上下文,但我宁愿有太多而不是不够,而且我永远不确定什么是相关的,什么是不相关的。我对这里的代码格式不满意,但我不太明白帮助中关于空格的内容,而且我对 Markdown 还不够熟悉(我希望注释符合要求)。另外,老实说,我不确定标签。
编辑:在顶部添加了 TL;DR,并且...
通过执行此操作的程序找到答案。我也会在回答中 post 它:ExtractNow 似乎有点过时,上次更新是在 17 年,但它做了我想要的。
在命令提示符下交互式使用:
for %z in ("\path\to\dir\subdir\*.zip") do @echo 7z "-o\path\to\extracted\%~nz" "%~z"
这不会 运行 7z,但它会打印出命令。一旦您对打印的命令看起来不错感到满意,请删除 @echo
以执行它们。
在批处理脚本中,您当然必须复制 %
符号。
通过执行此操作的程序找到了答案。 ExtractNow 似乎有点过时,上次更新是在 17 年,但它只做了一些设置更改就达到了我想要的效果。
So, in my research, I found
(7z x -o"...\Stellaris\mod\Examples" "...\content1990\*")
for cmd, which works, except that extracts everything to the same dir...
假设您使用的是 Windows,7-zip 可以很好地满足您的需求。您唯一缺少的是 *
字符,当与 -o
开关一起使用时,7-zip 将其扩展为存档名称:
7z x "dir\subdir\*.*" -o"dir\<b>*</b>"
</pre>
所以 7z x -o"...\Stellaris\mod\Examples" "...\content1990\*"
变成:
7z x -o"...\Stellaris\mod\Examples\<b>*</b>" "...\content1990\*"
</pre>
另请注意,*.*
不 表示 7-zip 下的任何文件。 7-Zip 将 *.*
作为任何具有扩展名的文件的名称。要处理所有文件,只需使用 "dir\subdir\*"
而无需额外的 .*
.
我有一堆档案要提取。问题是,它们有很多,而且有很多信息要四处移动。我想一次性搞定。研究可能比手动做要花更多的时间,但研究更有趣。
TL;DR:希望使用 7-zip 命令行帮助将多个档案提取到它们自己的目录中。如果您感觉特别有帮助,Autohotkey、Powershell 和批处理文件的答案也很好。
Win10,最新更新等等。我一直在使用 7-zip,所以如果有更好的提取器,这可能是一个有用的建议。我有一点编码经验,所以我通常可以解析一个例子并将其应用到我的项目中,但我不能自己想出代码。因此,我很乐意使用 cmd、autohotkey、powershell、batch files,还有一些其他的,但我需要一个例子才能做任何事情。哈哈
所以,在我的研究中,我发现 (7z x -o"...\Stellaris\mod\Examples\" "...\content1990\*") 对于 cmd,这是有效的,除了将所有内容提取到同一目录,因为存档文件位于根存档目录中(我认为这就是原因;如果它们是一个文件夹,它应该可以工作就像我想要的那样吗?)。我不 认为 您可以在路径中使用环境变量 (?)。不确定是什么让它在这里工作...
Powershell:我最近才开始修改它,所以我发现的那个脚本对我来说没有任何意义。并且从未发现有人为此使用 AutoHotKey。
最后是一个**批处理文件*,我发现
@echo 关闭
设置"filename=%~1"#Where does the working dir path go?
SET dirName=%文件名:~0,-4%#How/where would you put in wildcards?
7z x -o"%dirName%" "%filename%"
我不介意使用任何方法,但我可能更喜欢 AHK?我可能在那里最有经验。
如果你做到了这一步,哇,我印象深刻!我希望它足够连贯以便理解(可能一开始不是?)。也许有点有趣? 我觉得我很有趣。让我知道我是否应该为将来添加或删除任何内容。我知道这可能是太多的上下文,但我宁愿有太多而不是不够,而且我永远不确定什么是相关的,什么是不相关的。我对这里的代码格式不满意,但我不太明白帮助中关于空格的内容,而且我对 Markdown 还不够熟悉(我希望注释符合要求)。另外,老实说,我不确定标签。
编辑:在顶部添加了 TL;DR,并且...
通过执行此操作的程序找到答案。我也会在回答中 post 它:ExtractNow 似乎有点过时,上次更新是在 17 年,但它做了我想要的。
在命令提示符下交互式使用:
for %z in ("\path\to\dir\subdir\*.zip") do @echo 7z "-o\path\to\extracted\%~nz" "%~z"
这不会 运行 7z,但它会打印出命令。一旦您对打印的命令看起来不错感到满意,请删除 @echo
以执行它们。
在批处理脚本中,您当然必须复制 %
符号。
通过执行此操作的程序找到了答案。 ExtractNow 似乎有点过时,上次更新是在 17 年,但它只做了一些设置更改就达到了我想要的效果。
So, in my research, I found (7z x -o"...\Stellaris\mod\Examples" "...\content1990\*") for cmd, which works, except that extracts everything to the same dir...
假设您使用的是 Windows,7-zip 可以很好地满足您的需求。您唯一缺少的是 *
字符,当与 -o
开关一起使用时,7-zip 将其扩展为存档名称:
7z x "dir\subdir\*.*" -o"dir\<b>*</b>" </pre>
所以 7z x -o"...\Stellaris\mod\Examples" "...\content1990\*" 变成:
7z x -o"...\Stellaris\mod\Examples\<b>*</b>" "...\content1990\*" </pre>
另请注意,
*.*
不 表示 7-zip 下的任何文件。 7-Zip 将*.*
作为任何具有扩展名的文件的名称。要处理所有文件,只需使用"dir\subdir\*"
而无需额外的.*
.