批量删除指定目录下的压缩包文件里的文件

2025-9-10 / 0 评论 / 10 阅读

glmos-code-explain

CMD命令

for /r "\Cnzy\2j\SEX\tu" %f in (.zip) do 7z d "%f" .apk *.html -r

for /r "\Cnzy\2j\SEX\tu\" %f in (.zip.tmp) do ren "%f" ".tmp"

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

首先确保 7-Zip 已安装并添加到系统 PATH,然后在命令行中使用:

删除 ZIP 文件中的指定文件:

删除单个ZIP中的文件

7z d archive.zip "要删除的文件路径"

批量删除多个ZIP中的相同文件(Windows批处理)

for %f in (*.zip) do 7z d "%f" "不需要的文件.txt"

删除ZIP中的特定类型文件(例如所有.jpg)

7z d archive.zip "*.jpg"

删除 RAR 文件中的指定文件:
7z d archive.rar "要删除的文件路径"

7z d archive.zip .bak -r 是 7-Zip 命令行工具中用于删除压缩包内文件的命令,各参数含义如下:
7z:7-Zip 程序的命令行执行文件
d:操作指令,代表 "删除"(delete),表示要从压缩包中删除文件
archive.zip:指定要操作的压缩包文件名(这里是 ZIP 格式)
.bak:要删除的文件匹配模式,是通配符,.bak表示所有扩展名为.bak的文件
-r:递归删除开关(recursive),表示会同时删除压缩包内所有子目录中符合条件的文件
整个命令的作用是:从 archive.zip 压缩包中,递归删除所有扩展名为.bak 的文件(包括子文件夹中的.bak 文件)。
使用类似语法还可以删除其他类型的文件,例如:
7z d data.rar "temp/" -r:删除 RAR 包中 temp 目录下的所有文件(包括子目录)
7z d docs.zip "
.txt" "*.log":同时删除 ZIP 包中所有 txt 和 log 文件

以下是 7-Zip 命令行工具的主要操作指令(Commands)和常用开关(Switches)的完整列表:
一、核心操作指令(Commands)
7-Zip 的基本语法为:7z <命令> [开关] <压缩包> [文件/目录...]
命令 说明
a 添加文件到压缩包(add)
b 基准测试(benchmark),测试压缩速度和性能
d 从压缩包中删除文件(delete)
e 提取文件到当前目录(extract),不保留原目录结构
h 计算文件的哈希值(hash),支持 CRC32/CRC64/SHA-1/SHA-256 等
i 显示支持的格式信息(information)
l 列出压缩包内容(list)
rn 重命名压缩包中的文件(rename)
t 测试压缩包的完整性(test)
u 更新压缩包中的文件(update),仅添加比压缩包中更新的文件
x 提取文件并保留原目录结构(extract with full paths)
二、常用开关(Switches)
开关用于调整命令的行为,格式为 -<开关> 或 /<开关>

  1. 压缩格式与级别
    开关 说明
    -t<格式> 指定压缩格式(type),如 -tzip(ZIP)、-trar(RAR)、-t7z(7Z)等
    -mx<级别> 设置压缩级别(0-9),0 = 存储(无压缩),9 = 最高压缩(最慢)
    -m0=<方法> 指定压缩方法,如 -m0=Deflate(ZIP 默认)、-m0=LZMA(7Z 默认)
  2. 压缩包操作
    开关 说明
    -r 递归处理子目录(recurse)
    -ssw 压缩或提取系统和隐藏文件(include system and hidden files)
    -snl 不记录压缩包的绝对路径(store symbolic links as links)
    -sdel 添加文件到压缩包后删除源文件(delete files after compression)
  3. 提取相关
    开关 说明
    -o<目录> 指定提取输出目录(output directory),如 -oD:\extract
    -aou 提取时自动重命名重复文件(auto rename output file)
    -aot 提取时覆盖已存在的文件(overwrite all existing files)
    -aoa 提取时跳过已存在的文件(skip existing files)
  4. 密码与加密
    开关 说明
    -p<密码> 设置压缩包密码(password),如 -p123456
    -mhe=on 加密压缩包的文件列表(encrypt file headers)
    -mhc=on 加密压缩包的校验和(encrypt header checksum)
  5. 其他常用开关
    开关 说明
    -y 所有操作都自动确认(yes),不提示用户
    -scs<编码> 指定控制台输入编码,如 -scsUTF-8
    -scc<编码> 指定控制台输出编码,如 -sccUTF-8
    -bb<级别> 设置日志详细程度(0-3),3 = 最详细
    三、示例
    创建加密的 7Z 压缩包(最高压缩级别):
    7z a -t7z -mx9 -p123456 archive.7z ./docs/
    递归提取 ZIP 到指定目录并覆盖文件:
    7z x archive.zip -oD:\output -aot -r
    测试 RAR 压缩包完整性:
    7z t data.rar
    列出压缩包中所有.txt 文件:
    7z l archive.zip
    .txt -r
    可以通过 7z --help 命令查看完整的官方文档。

使用 WinRAR 命令行
如果安装了 WinRAR,可以使用其命令行工具:

删除RAR中的文件

rar d archive.rar "要删除的文件.txt"

删除ZIP中的文件

rar d archive.zip "要删除的文件.txt"

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

https://www.doubao.com/chat/19879703861218050

.版本 2
.支持库 iext
.支持库 shell
.支持库 archive

.程序集 窗口程序集_启动窗口
.程序集变量 目标目录, 文本型
.程序集变量 待删除文件列表, 文本型, , "0"
.程序集变量 处理类型, 整数型, , , 0=全部 1=仅ZIP 2=仅RAR

.子程序 _按钮_选择目录_被单击
.局部变量 选择目录, 文本型

选择目录 = 浏览文件夹 (“请选择压缩文件所在目录”, )
.如果真 (选择目录 ≠ “”)
目标目录 = 选择目录
编辑框_目录.内容 = 目标目录
.如果真结束

.子程序 _按钮_添加文件_被单击
.局部变量 文件名, 文本型

文件名 = 编辑框_文件名.内容
.如果真 (文件名 ≠ “” 且 寻找文本 (文件名, “|”, , 假) = -1)
待删除文件列表.加入成员 (文件名)
列表框_文件列表.加入项目 (文件名)
编辑框_文件名.内容 = “”
.如果真结束

.子程序 _按钮_开始处理_被单击
.局部变量 文件列表, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 文件名, 文本型
.局部变量 文件路径, 文本型

.如果 (目标目录 = “”)
信息框 (“请先选择目录”, 0, )
返回
.如果结束

.如果 (取数组成员数 (待删除文件列表) = 0)
信息框 (“请先添加要删除的文件”, 0, )
返回
.如果结束

' 获取处理类型
.如果 (单选框_全部.选中 = 真)
处理类型 = 0
.否则如果 (单选框_ZIP.选中 = 真)
处理类型 = 1
.否则
处理类型 = 2
.如果结束

' 获取目录中的所有文件
文件列表 = 寻找文件 (目标目录 + “*.*”, 16)
.如果 (取数组成员数 (文件列表) = 0)
信息框 (“所选目录中没有文件”, 0, )
返回
.如果结束

' 开始处理文件
进度条_处理.位置 = 0
进度条_处理.最大位置 = 取数组成员数 (文件列表)

.计次循环首 (取数组成员数 (文件列表), i)
文件名 = 文件列表 [i]
文件路径 = 目标目录 + “\” + 文件名
标签_状态.标题 = “正在处理: ” + 文件名

' 处理ZIP文件
.如果 (处理类型 ≠ 2 且 取文本右边 (文件名, 4) = “.zip” 或 取文本右边 (文件名, 4) = “.ZIP”)
    处理ZIP文件 (文件路径)
.否则
    ' 处理RAR文件
    .如果 (处理类型 ≠ 1 且 (取文本右边 (文件名, 4) = “.rar” 或 取文本右边 (文件名, 4) = “.RAR” 或 取文本右边 (5, 文件名) = “.rar5”))
        处理RAR文件 (文件路径)
    .如果结束
.如果结束

进度条_处理.位置 = i
处理事件 ()

.计次循环尾 ()

信息框 (“处理完成!”, 0, )
标签_状态.标题 = “处理完成”

.子程序 处理ZIP文件, 逻辑型
.参数 ZIP文件路径, 文本型
.局部变量 临时ZIP文件, 文本型
.局部变量 ZIP对象, 压缩包
.局部变量 临时ZIP对象, 压缩包
.局部变量 文件总数, 整数型
.局部变量 i, 整数型
.局部变量 文件名, 文本型
.局部变量 需要保留, 逻辑型
.局部变量 j, 整数型

临时ZIP文件 = 取临时文件名 () + “.zip”

' 打开源ZIP文件
.如果 (ZIP对象.打开 (ZIP文件路径, 1) = 假)
输出调试文本 (“无法打开ZIP文件: ” + ZIP文件路径)
返回 假
.如果结束

' 创建临时ZIP文件
.如果 (临时ZIP对象.创建 (临时ZIP文件) = 假)
输出调试文本 (“无法创建临时ZIP文件”)
ZIP对象.关闭 ()
返回 假
.如果结束

文件总数 = ZIP对象.取文件总数 ()
.计次循环首 (文件总数, i)
文件名 = ZIP对象.取文件名 (i - 1)
需要保留 = 真

' 检查是否为需要删除的文件
.计次循环首 (取数组成员数 (待删除文件列表), j)
    .如果 (寻找文本 (文件名, 待删除文件列表 [j], , 假) ≠ -1)
        需要保留 = 假
        跳出循环
    .如果结束
.计次循环尾 ()

' 如果需要保留,则添加到临时ZIP
.如果 (需要保留 = 真)
    临时ZIP对象.添加文件从压缩包 (ZIP对象, i - 1)
.如果结束

.计次循环首

' 关闭压缩包
ZIP对象.关闭 ()
临时ZIP对象.关闭 ()

' 替换原文件
.如果 (文件是否存在 (ZIP文件路径) = 真)
删除文件 (ZIP文件路径)
.如果结束
复制文件 (临时ZIP文件, ZIP文件路径, 真)
删除文件 (临时ZIP文件)

返回 真

.子程序 处理RAR文件, 逻辑型
.参数 RAR文件路径, 文本型
.局部变量 临时目录, 文本型
.局部变量 临时RAR文件, 文本型
.局部变量 RAR对象, 压缩包
.局部变量 新RAR对象, 压缩包
.局部变量 文件总数, 整数型
.局部变量 i, 整数型
.局部变量 文件名, 文本型
.局部变量 需要保留, 逻辑型
.局部变量 j, 整数型
.局部变量 提取结果, 逻辑型

' 创建临时目录
临时目录 = 取临时目录 () + “\RARTEMP” + 取随机数文本 (8)
创建目录 (临时目录)

临时RAR文件 = 取临时文件名 () + “.rar”

' 打开RAR文件
.如果 (RAR对象.打开 (RAR文件路径, 1) = 假)
输出调试文本 (“无法打开RAR文件: ” + RAR文件路径)
删除目录 (临时目录, 真)
返回 假
.如果结束

文件总数 = RAR对象.取文件总数 ()
.计次循环首 (文件总数, i)
文件名 = RAR对象.取文件名 (i - 1)
需要保留 = 真

' 检查是否为需要删除的文件
.计次循环首 (取数组成员数 (待删除文件列表), j)
    .如果 (寻找文本 (文件名, 待删除文件列表 [j], , 假) ≠ -1)
        需要保留 = 假
        跳出循环
    .如果结束
.计次循环尾 ()

' 如果需要保留,则提取到临时目录
.如果 (需要保留 = 真)
    提取结果 = RAR对象.提取文件 (i - 1, 临时目录)
    .如果 (提取结果 = 假)
        输出调试文本 (“提取文件失败: ” + 文件名)
    .如果结束
.如果结束

.计次循环首

RAR对象.关闭 ()

' 创建新的RAR文件
.如果 (新RAR对象.创建 (临时RAR文件) = 假)
输出调试文本 (“无法创建临时RAR文件”)
删除目录 (临时目录, 真)
返回 假
.如果结束

' 添加临时目录中的文件到新RAR
新RAR对象.添加目录 (临时目录 + “*.*”, )
新RAR对象.关闭 ()

' 替换原文件
.如果 (文件是否存在 (RAR文件路径) = 真)
删除文件 (RAR文件路径)
.如果结束
复制文件 (临时RAR文件, RAR文件路径, 真)

' 清理临时文件
删除文件 (临时RAR文件)
删除目录 (临时目录, 真)

返回 真

.子程序 _按钮_清空列表_被单击
待删除文件列表 = {}
列表框_文件列表.清空 ()

.子程序 _窗口程序集_启动窗口_创建完毕
单选框_全部.选中 = 真

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

7-Zip命令行版

.版本 2
.支持库 shell

.程序集 程序集_启动窗口, , , 本源码来自易语言资源网(www.eyuyan.la)

.子程序 __启动窗口_创建完毕, , , 本源码来自易语言资源网(www.eyuyan.la)

释放文件 ()

' 7zip安装目录下有使用说明
' a:将文件添加到压缩档案中
' b:测试压缩或解压算法执行时的 CPU 占用
' d:从压缩档案中删除文件
' e:将压缩档案中的所有文件解压到指定路径,所有文件将输出到同一个目录中
' h:计算文件的哈希值
' i:显示有关支持格式的信息
' l:列出压缩档案的内容
' rn:重命名压缩档案中的文件
' t:测试压缩档案的完整性
' u:更新要进入压缩档案中的文件
' x:将压缩档案中的所有文件解压到指定路径,并包含所有文件的完整路径

.子程序 释放文件, , , 本源码来自易语言资源网(www.eyuyan.la)

' 7z.exe与7z.dll的来源:下载7zip安装后在安装目录里可以找到
.如果真 (文件是否存在 (取特定目录 (#临时文件目录) + “7z.exe”) = 假)
写到文件 (取特定目录 (#临时文件目录) + “7z.exe”, 到字节集 (#ZIP_7z)) ' 释放7z.exe到临时文件目录
.如果真结束
.如果真 (文件是否存在 (取特定目录 (#临时文件目录) + “7z.dll”) = 假)
写到文件 (取特定目录 (#临时文件目录) + “7z.dll”, 到字节集 (#DLL_7z)) ' 释放7z.dll到临时文件目录
.如果真结束

.子程序 _按钮_读取文件_被单击, , , www.eyuyan.la
.局部变量 文件名, 文本型

通用对话框.类型 = 0 ' 设置为打开文件类型
通用对话框.初始目录 = 取特定目录 (3) ' 设置默认路径为桌面
.如果真 (通用对话框.打开 () = 真) ' 点击窗口确定
文件名 = 通用对话框.文件名
.如果真 (文件名 ≠ “”)
编辑框_文件路径.内容 = 文件名
.如果真结束

.如果真结束

.子程序 _按钮_压缩_被单击, , , 易语言学习资源、源码下载站:www.eyuyan.la

.如果真 (编辑框_文件路径.内容 ≠ “”)
' a:压缩文件
运行 (取特定目录 (#临时文件目录) + “7z.exe a ” + 取特定目录 (3) + “压缩包名 ” + 编辑框_文件路径.内容, 真, #隐藏窗口)
.如果真结束

.子程序 _按钮_解压_被单击

.如果真 (编辑框_文件路径.内容 ≠ “”)
' x:解压压缩包
' -aoa:覆盖已存在文件,否则存在文件或者文件夹则不解压
' -o:指定要解压缩文件的目标目录
运行 (取特定目录 (#临时文件目录) + “7z.exe x -aoa ” + 编辑框_文件路径.内容 + “ -o” + 取特定目录 (3), 真, #隐藏窗口)
.如果真结束