批处理如何使用 7zip 将多个 zip 文件提取到它们的原始文件夹?
Batch How to extract multiple zip files to their origin folder with 7zip?
我在不同的文件夹中有多个 zip 文件,我想将它们解压缩到它们所在的文件夹中。
Parent Folder
-Folderwithzip1
--zip1
--[Content from zip1 should land here]
-Folderwithzip2
--zip2
--[Content from zip2 should land here]
我试过了
for /r "C:\zip" %f in (*.zip) do do 7z x -o "%~dpf" "%f"
我也试过了
FOR /F "USEBACKQ tokens=*" %%F IN (`DIR /b *.zip`) DO ("C:\Program Files-Zipz.exe" e "%%F" -y)
但这只会提取批处理文件所在文件夹中的文件。
但是批处理甚至没有开始。
命令行包含两次关键字do
,这是第一个错误。
第二个错误是-o
和"%~dpf"
之间的space字符。
7-Zip的帮助是7-Zip程序文件夹中的文件7zip.chm
,可以从 7-Zip 中打开或双击此文件。在选项卡 Contents 上有列表项 Command Line Version 和子列表项 Switches 包含 link到-o(设置输出目录)开关。此帮助页面上解释的语法以及示例在开关 -o
和目录路径之间没有 space。
7-Zip 也会在执行时输出适当的错误消息,在 -o
和输出目录路径之间有一个 space:
Command Line Error:
Too short switch:
-o
所以对于命令行用法,解决方案非常简单:
for /R "C:\zip" %I in (*.zip) do "C:\Program Files-Zipz.exe" x -o"%~dpI" -y -- "%I"
并在批处理文件中使用每个百分号再转义一个百分号:
for /R "C:\zip" %%I in (*.zip) do "C:\Program Files-Zipz.exe" x -o"%%~dpI" -y -- "%%I"
我还建议 运行ning 在命令提示符 window for /?
中阅读命令 FOR.[=25 的帮助输出=]
DIR 这里不需要,除了还有一些带有隐藏属性集的 *.zip 文件,这些文件总是被 FOR 或一些忽略的 ZIP 文件本身包含 *.zip 文件,应避免在 运行 批处理文件中提取这些 *.zip 文件。 运行 在命令提示符 window dir /?
中获取有关命令 DIR.
的帮助
可以在批处理文件中使用以下命令行,首先在 FOR[ 启动的单独命令进程中 运行 命令 DIR =63=] 使用 cmd /C
,捕获由 DIR 编写的所有内容以处理 STDOUT 然后处理所有捕获的行(=完全限定文件名)逐行:
for /F "delims=" %%I in ('dir "C:\zip\*.zip" /A-D /B /S 2^>nul') do "C:\Program Files-Zipz.exe" x -o"%%~dpI" -y -- "%%I"
此处需要 DIR 选项 /S
让 DIR 也在 C:\zip
的所有子目录中搜索*.zip 文件并输出找到的 *.zip 文件的名称,其中包含完整路径而不是仅文件名。
我在不同的文件夹中有多个 zip 文件,我想将它们解压缩到它们所在的文件夹中。
Parent Folder
-Folderwithzip1
--zip1
--[Content from zip1 should land here]
-Folderwithzip2
--zip2
--[Content from zip2 should land here]
我试过了
for /r "C:\zip" %f in (*.zip) do do 7z x -o "%~dpf" "%f"
我也试过了
FOR /F "USEBACKQ tokens=*" %%F IN (`DIR /b *.zip`) DO ("C:\Program Files-Zipz.exe" e "%%F" -y)
但这只会提取批处理文件所在文件夹中的文件。
但是批处理甚至没有开始。
命令行包含两次关键字do
,这是第一个错误。
第二个错误是-o
和"%~dpf"
之间的space字符。
7-Zip的帮助是7-Zip程序文件夹中的文件7zip.chm
,可以从 7-Zip 中打开或双击此文件。在选项卡 Contents 上有列表项 Command Line Version 和子列表项 Switches 包含 link到-o(设置输出目录)开关。此帮助页面上解释的语法以及示例在开关 -o
和目录路径之间没有 space。
7-Zip 也会在执行时输出适当的错误消息,在 -o
和输出目录路径之间有一个 space:
Command Line Error:
Too short switch:
-o
所以对于命令行用法,解决方案非常简单:
for /R "C:\zip" %I in (*.zip) do "C:\Program Files-Zipz.exe" x -o"%~dpI" -y -- "%I"
并在批处理文件中使用每个百分号再转义一个百分号:
for /R "C:\zip" %%I in (*.zip) do "C:\Program Files-Zipz.exe" x -o"%%~dpI" -y -- "%%I"
我还建议 运行ning 在命令提示符 window for /?
中阅读命令 FOR.[=25 的帮助输出=]
DIR 这里不需要,除了还有一些带有隐藏属性集的 *.zip 文件,这些文件总是被 FOR 或一些忽略的 ZIP 文件本身包含 *.zip 文件,应避免在 运行 批处理文件中提取这些 *.zip 文件。 运行 在命令提示符 window dir /?
中获取有关命令 DIR.
可以在批处理文件中使用以下命令行,首先在 FOR[ 启动的单独命令进程中 运行 命令 DIR =63=] 使用 cmd /C
,捕获由 DIR 编写的所有内容以处理 STDOUT 然后处理所有捕获的行(=完全限定文件名)逐行:
for /F "delims=" %%I in ('dir "C:\zip\*.zip" /A-D /B /S 2^>nul') do "C:\Program Files-Zipz.exe" x -o"%%~dpI" -y -- "%%I"
此处需要 DIR 选项 /S
让 DIR 也在 C:\zip
的所有子目录中搜索*.zip 文件并输出找到的 *.zip 文件的名称,其中包含完整路径而不是仅文件名。