吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8306|回复: 13
收起左侧

[其他原创] [7zip批量压缩][bat脚本] 命令行操作 7zip (附脚本)

  [复制链接]
smarth 发表于 2021-9-22 12:01
本帖最后由 smarth 于 2021-9-22 13:36 编辑

前言

[2021-09-22-13:31] 更新

本脚本适用于批量压缩解压缩, 比如我前段时间爬了海贼王漫画, 1000多话,以每话为单位压缩。

如果想用命令压缩单个文件的话可以将7z.exe放入系统变量进入cmd使用命令

个人博客

首发于个人博客

概述

用命令行操作7zip 实现批量压缩与解压缩

本文适用于windows, 理论上略作修改也可适配其他系统,但没必要(有更好选择)。

参考

参考教程(打不开挂代{过}{滤}理)

原理

利用循环命令操作 7z.exe 文件,实现批量复制与解压缩

命令介绍

命令详情

在 7zip 安装目录下(含有 7z.exe 文件)输入 7z 可查看命令详情

        7-Zip 20.02 alpha (x64) : Copyright (c) 1999-2020 Igor Pavlov : 2020-08-08

        Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [@listfile]

        <Commands>
          a : Add files to archive
          b : Benchmark
          d : Delete files from archive
          e : Extract files from archive (without using directory names)
          h : Calculate hash values for files
          i : Show information about supported formats
          l : List contents of archive
          rn : Rename files in archive
          t : Test integrity of archive
          u : Update files to archive
          x : eXtract files with full paths

        <Switches>
          -- : Stop switches and @listfile parsing
          -ai[r[-|0]]{@listfile|!wildcard} : Include archives
          -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
          -ao{a|s|t|u} : set Overwrite mode
          -an : disable archive_name field
          -bb[0-3] : set output log level
          -bd : disable progress indicator
          -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
          -bt : show execution time statistics
          -i[r[-|0]]{@listfile|!wildcard} : Include filenames
          -m{Parameters} : set compression Method
                -mmt[N] : set number of CPU threads
                -mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
          -o{Directory} : set Output directory
          -p{Password} : set Password
          -r[-|0] : Recurse subdirectories
          -sa{a|e|s} : set Archive name mode
          -scc{UTF-8|WIN|DOS} : set charset for for console input/output
          -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
          -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
          -sdel : delete files after compression
          -seml[.] : send archive by email
          -sfx[{name}] : Create SFX archive
          -si[{name}] : read data from stdin
          -slp : set Large Pages mode
          -slt : show technical information for l (List) command
          -snh : store hard links as links
          -snl : store symbolic links as links
          -sni : store NT security information
          -sns[-] : store NTFS alternate streams
          -so : write data to stdout
          -spd : disable wildcard matching for file names
          -spe : eliminate duplication of root folder for extract command
          -spf : use fully qualified file paths
          -ssc[-] : set sensitive case mode
          -sse : stop archive creating, if it can't open some input file
          -ssp : do not change Last Access Time of source files while archiving
          -ssw : compress shared files
          -stl : set archive timestamp from the most recently modified file
          -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
          -stx{Type} : exclude archive type
          -t{Type} : Set type of archive
          -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
          -v{Size}[b|k|m|g] : Create volumes
          -w[{path}] : assign Work directory. Empty path means a temporary directory
          -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
          -y : assume Yes on all queries

关键命令

  1. aadd 或 archive  压缩命令

    7z a example.7z test.txt 可将当前目录下 test.txt 文件压缩到 example.7z 文件

  2. e 即 extra 解压命令(会破坏压缩包文件结构)

  3. x 即 eXtra 解压命令(保留压缩包文件结构)

  4. -p 添加密码参数

    7z a example.7z test.txt -p123456 会将 test.txt 文件压缩到 example.7z 且密码为 123456

    7z e example.7z -p123456 使用密码123456 解压

脚本内容

一键压缩

    :: archive.bat

        @echo off
        for %%f in (*) do CALL :run %%f
        for /d %%d in (*) do CALL :run %%d

        :run
        echo %~1
        echo %~1|findstr ".bat" > nul && echo bat file || CALL :7zArchive %~1
        EXIT /B 0

        :7zArchive 
        if not %~dnp1=="" (
                path a "%~dnp1.7z" %~1 -ppassword
        )
        EXIT /B 0

一键解压缩

           :: extra.bat

        for %%z in (*.7z, *.zip, *.rar) do path x %%z -ppassword

使用方法

  1. 新建extra.batarchive.bat, 将对应内容复制到对应文件内

  2. 将脚本内path更改为7z.exe文件路径

    示例  C:\Program Files\7-Zip\7z.exe

  3. 默认设定密码为 password 可自行更改, 注意解压时密码匹配

本帖被以下淘专辑推荐:

  • · Aarow|主题: 988, 订阅: 305

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| smarth 发表于 2021-9-22 18:13
Natu 发表于 2021-9-22 16:59
感谢楼主分享批量压缩脚本思路,不过我更感兴趣的是论坛发帖时用到的“复制代码、隐藏代码”,能把“一键解 ...

你是对 markdown 语法感兴趣吗?

在发贴的时候选择插入markdown(应该是这个名字), 然后按照markdown语法输入内容就行了

你要的源码

## 脚本内容

### 一键压缩

   ```shell
    :: archive.bat

        @echo off
        for %%f in (*) do CALL :run %%f
        for /d %%d in (*) do CALL :run %%d

        :run
        echo %~1
        echo %~1|findstr ".bat" > nul && echo bat file || CALL :7zArchive %~1
        EXIT /B 0

        :7zArchive
        if not %~dnp1=="" (
                path a "%~dnp1.7z" %~1 -ppassword
        )
        EXIT /B 0
   ```

### 一键解压缩

   ```shell
           :: extra.bat

        for %%z in (*.7z, *.zip, *.rar) do path x %%z -ppassword
   ```

其中 ### 表示三级标题

```  ``` 包起来的内容会显示为代码块 ```shell  ``` 表示代码内容为shell语言

`  ` 这个也是显示代码的

其他markdown语法可以自行搜索学习
Natu 发表于 2021-9-23 08:32
smarth 发表于 2021-9-22 18:13
你是对 markdown 语法感兴趣吗?

在发贴的时候选择插入markdown(应该是这个名字), 然后按照markdown语 ...

谢谢您的回复,我现在用Joplin做笔记,以前做的笔记也都改用markdown语法保存。对markdown略有了解,论坛中的代码块很实用,得您指点已经弄明白了,采用如下语法结构就会自动生成代码块结构。

```C
代码内容
```
依佳人时代 发表于 2021-9-22 12:09
四君子 发表于 2021-9-22 12:18
牛逼6666666
Natu 发表于 2021-9-22 16:59
感谢楼主分享批量压缩脚本思路,不过我更感兴趣的是论坛发帖时用到的“复制代码、隐藏代码”,能把“一键解压缩”这一段的论坛源码给我分享一下吗?论坛帮助文件里边的我尝试过了,反复测试都不行,给版主发消息也没人回,楼主能抽空分享一下将不甚感激!
Natu 发表于 2021-9-22 17:03

有DOS基础就对这个有兴趣,虽然windows发展很多年了,DOS解决这类批量处理还是很擅长的。
 楼主| smarth 发表于 2021-9-22 18:08
Natu 发表于 2021-9-22 17:03
有DOS基础就对这个有兴趣,虽然windows发展很多年了,DOS解决这类批量处理还是很擅长的。

可以去研究一下 shell 脚本

同样是操作文件和系统, dos 只对windows起作用,shell则是适用于全平台(就算是windwos 也有power shell)

而且shell教程更多更全面
Natu 发表于 2021-9-22 21:32
smarth 发表于 2021-9-22 18:08
可以去研究一下 shell 脚本

同样是操作文件和系统, dos 只对windows起作用,shell则是适用于全平台( ...

谢谢,没有仔细研究过,遇到问题了才会去查资料搞研究,哈哈
Natu 发表于 2021-9-22 21:42
smarth 发表于 2021-9-22 18:13
你是对 markdown 语法感兴趣吗?

在发贴的时候选择插入markdown(应该是这个名字), 然后按照markdown语 ...

谢谢你,我已经学会了。

这仅仅是一个测试。
wi_xue2008 发表于 2021-9-22 23:14
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-12 21:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表