我在不同的文件夹中有多个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\7-Zip\7z.exe" e "%%F" -y)
但这只会提取批处理文件所在文件夹中的文件。
但是批处理甚至没有开始。
答案 0 :(得分:0)
命令行中两次包含关键字do
,这是第一个错误。
第二个错误是-o
和"%~dpf"
之间的空格字符。
7-Zip 的帮助是 7-Zip 的程序文件文件夹中的文件7zip.chm
,可以从 7内部打开-Zip ,或双击该文件。在选项卡内容中,列表项 Command Line Version 中带有子列表项 Switches ,其中包含指向 -o(设置输出目录)的链接)切换。帮助页面上解释的语法以及示例在开关-o
和目录路径之间没有空格。
7-Zip 还会在执行时输出适当的错误消息,并在-o
和输出目录路径之间加一个空格:
命令行错误:
开关太短:
-o
因此,该解决方案对于命令行用法非常简单:
for /R "C:\zip" %I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%~dpI" -y -- "%I"
在批处理文件中使用时,每个百分号都转义了一个百分号:
for /R "C:\zip" %%I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"
我建议也运行在命令提示符窗口for /?
中,并阅读命令 FOR 的帮助输出。
DIR ,除非还有* .zip文件具有隐藏的属性集,这些文件始终被 FOR 忽略,或者某些ZIP文件包含*。批处理文件时,应避免使用zip文件并提取那些* .zip文件。在命令提示符窗口dir /?
中运行,以获取有关命令 DIR 的帮助。
可以在批处理文件中使用以下命令行,以在由 FOR 使用cmd /C
启动的单独命令过程中首先运行命令 DIR ,捕获 DIR 编写的所有内容以处理 STDOUT ,然后逐行处理所有捕获的行(=完整的合格文件名):
for /F "delims=" %%I in ('dir "C:\zip\*.zip" /A-D /B /S 2^>nul') do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"
在这里需要 DIR 选项/S
,以便让 DIR 还在C:\zip
的所有子目录中搜索* .zip文件并输出找到的具有完整路径的* .zip文件的名称,而不仅仅是文件名。