github_33985496
2018-06-20 10:36
采纳率: 50%
浏览 4.5k
已采纳

多个7zip文件 递归解压 如何保存原目录结构

求问解压多层目录如何才能解压到各自所在文件夹
通过使用 7za.exe x -r 参数只能解压到统一目录

a/b/c/c1.zip
a/b/c/c2.zip
a/a1.zip

使用 " 7za.exe x -r a/ " 命令会得到

a/c1.txt c2.txt a1.txt

如何才能解压到各自原本所在的文件夹

a/b/c/c1.txt
a/b/c/c2.txt
a/a1.txt
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • fd5788 2018-06-21 03:16
    已采纳

    -o 指定输出路径,如a/b/c/c1.zip,用7z x a/b/c/c1.zip -oa/b/c,注意-o和路径之间不要有空格

    点赞 评论
  • blownewbee 2018-06-20 14:03

    $ 7z --help

    Usage: 7z [...] [...]

    [<@listfiles...>]

    常用的command如下:

    a 添加文件到压缩文件

    d 从压缩文件中删除文件

    e 从压缩文件中解压缩文件,不包含目录结构

    l 列出压缩包中的内容

    t 测试压缩文件

    u更新文件到压缩文件

    x从压缩文件中解压缩,包含目录结构 注意看这里

    点赞 评论
  • qq_35292222 2018-06-21 02:13

    全压缩:
    7zr a -t7z temp.7z ziptest/
    排除bbb目录,所有的,任何目录下的bbb目录:
    7zr a -t7z temp.7z ziptest/ -xr!bbb
    排除bbb文件,所有的,任何目录下的bbb文件:
    7zr a -t7z temp.7z ziptest/ -x!bbb
    排除.svn目录:
    7zr a -t7z temp.7z ziptest -xr!.svn
    7zip排除目录的路径里不能用当前目录 . ,如 -xr!./.svn,会过滤失败, .svn 还会压缩进去。
    也可以把要排除的目录路径写入文件,例如:

    ziptest_x.txt:

    ziptest/.svn

    ziptest/bbb

    7zr a -t7z temp.7z ziptest/ -xr@ziptest_x.txt

    如果是排除的是文件,把要排除的各个文件名写入一个文件,用 -x@x_fn.txt 就可以排除所写文件。

    点赞 评论
  • qq_28463475 2018-06-21 09:22

    $ 7z a study.7z study/ ~ 将study整个目录添加到压缩包study.7z中
    $ 7z t study.7z ~ 测试压缩包
    $ 7z x study.7z ~ 解压缩包到当前目录
    $ 7z d study.7z study/d2/f2.php ~ 删除压缩包中的指定文件
    $ 7z t study.7z ~ 测试压缩包
    $ 7z l study.7z ~ 查看压缩包中的目录结构
    $ 7z u study.7z study/d1/d11/f1.c ~ 更新压缩包中的指定文件
    $ 7z l study.7z ~ 查看压缩包中的目录结构

    点赞 评论
  • 胡杨木舟 2019-04-20 00:15

    下载的一个python学习资料,打开以后将近100的zip包,单独手动解压太麻烦了,就想到了代码解决,不得不说一句,懒则思变啊下面是用python对文件夹进行循环读取,并解压到原路径下

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import zipfile
    import os
    """
    @attention: 
    """
    #获取文件文件目录下所有文件名,并放到list中
    def upzip(path):
        file_list = os.listdir(path)
        zip_list = []
        for file_name in file_list:
            zip_name = os.path.join(path,file_name)
            zip_list.append(zip_name)
        for_list(zip_list)
        #print(zip_list)
    
    
    '''#遍历list'''
    def for_list(list):
        print("遍历文件名")
        for name  in list:
            if ".zip" in  name:
                #print("文件名为: " + name)
                unzip(name)
    
    
    '''解压文件'''
    def unzip(filename):
        #print("解压文件开始")
        if os.path.splitext(filename)[1] != '.zip':
            pass
        else:
            zip_file = zipfile.ZipFile(filename,'r')
            if os.path.isdir(filename):
                pass
            else:
                new_fname = filename.split(".")
                os.mkdir(new_fname[0])
                print("开始解压文件 " + filename)
            for names in zip_file.namelist():
                zip_file.extract(names, new_fname[0])
            zip_file.close() 
    
    
    if __name__ == "__main__":
        path = "D:\零基础入门学习Python"
        upzip(path)
    
    点赞 评论