如何提取文件夹中子目录中包含的多个档案,并将结果输出回档案所在的文件夹。
答案1
首先,安装7-zip。
bat
在包含许多子目录的目录根目录中创建一个文件,其中包含存档。然后粘贴以下内容:
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
启动该bat,所有rar/zip文件都会被提取到它们所在的文件夹中。
这是如何运作的?
FOR /D /r %%F 在 ("*") DO (
For循环循环遍历当前目录中的所有文件夹,并将路径放入变量中
%%F
。
推 %CD%
将我们当前所在的目录放入内存。
光盘%%F
将变量中的文件夹设置
%%F
为当前目录。
FOR %%X in (*.rar *.zip) DO (
对于当前文件夹中的所有
rar
和文件,执行以下操作:zip
"C:\Program Files\7-zip\7z.exe" x "%%X"
对文件运行 7-zip。需要用引号引起来,
%%X
因为有些文件名中有空格。
popd
返回到我们之前存储在内存中的上一个目录。
希望这对某人有用。
答案2
我在 Windows Vista 中运行脚本时遇到了问题。当我运行代码时什么也没发生。我需要管理员身份才能运行脚本。当我右键单击 .bat 文件并“以管理员身份运行”时,它不起作用,因为它出于某种原因在 system32 文件夹中启动(如果我没记错的话)。要解决这个问题,只需使用 Windows 环境变量(解释如下:Windows 环境变量)%~dp0 切换回运行脚本的目录。
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x %%X
)
popd
)
确保没有 *.rar 或 *.zip 文件与脚本处于同一级别。它们应该低一级。
我希望这个评论能对某人有所帮助。
答案3
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
在当前目录中开始递归搜索,查找所有以 .zip 结尾的文件,然后将其导入循环。对于找到的每个文件,它都会对文件运行解压缩命令,并将输出分流到文件的目录。
答案4
上述答案有效,但是,如果您正在运行Windows 64-bit
和7-Zip 32-bit
,则正确的路径是C:\Program Files (x86)\7-Zip
7-Zip。以下是对我有用的脚本。
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files (x86)\7-zip\7z.exe" x %%X
)
popd
)