首页/新闻资讯/正文详情

AutoHotkey 脚本批量解压:ZIP 自动化完整实现

发布时间:2026/11/3 1:46:17 来源:云帆数科 栏目:资讯中心
AutoHotkey 脚本批量解压:ZIP 自动化完整实现
AutoHotkey 脚本批量解压ZIP 自动化完整实现【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkeyAutoHotkey 是 Windows 上的自动化脚本语言本文用它写一个 ZIP 自动解压脚本扫描目录里的压缩包逐个解压到独立子目录并输出带时间戳的日志。月底那批压缩包不想再点二十次右键月末财务发来 23 个 ZIP每月一包的报表散在D:\Inbox里要分别解压到各自目录才能归档。手动操作就是选中—解压到此处—确认重复 23 遍全程没有思考量但耗时和出错点都在这。这个任务的特点正好适合脚本输入是一个目录通配符规则固定结果可验证每个包对应一个目录。缺的只是把这三步串起来的东西。为什么用 AutoHotkey 而不是现成工具不用装额外的 GUI 批处理软件官方安装包约 3 MB脚本即文档文件遍历、建目录、日志都是内置命令解压只需调用一行命令行后续要改成定时监控、按日期命名都是在同一文件里加几行对比 7-Zip 自带的7zG批处理AHK 的优势在于日志、错误分支、界面交互都写在一个脚本里维护成本更低。环境准备AutoHotkey v1.1.x 加 7-ZipAutoHotkey v1.1.33 及以上本脚本按 v1.x 语法编写7-Zip解压走它的命令行版7z.exe默认安装在C:\Program Files\7-Zip\7z.exe命令行同步等待比 GUI 弹窗稳定得多脚本顶部的配置区一共 5 个变量InboxDir : D:\Inbox OutRoot : D:\Inbox\Unpacked SevenZip : C:\Program Files\7-Zip\7z.exe LogFile : D:\Inbox\unzip.log SkipHidden : True5 行代码扫描目录里的全部 ZIPLoop, Files负责列出目标目录中所有匹配通配符的文件循环体内通过内置变量拿到每个文件的路径Loop, Files, %InboxDir%\*.zip, F { ZipPath : A_LoopFileFullPath ; 当前 ZIP 的完整路径 FileGetBaseName, Name, %ZipPath% ; 不含扩展名的文件名 ... }末尾的F标志表示只匹配文件、排除目录对应 source/script2.cpp 中FileIsFilteredOut的过滤逻辑目录属性命中时按循环模式直接排除。整个文件循环由 source/script.cpp 里的Line::PerformLoopFilePattern实现它先用ParseLoopFilePattern把D:\Inbox\*.zip拆成目录 通配符两部分再基于FindFirstFile/FindNextFile逐个取结果。源码注释里写明了这个结构约 128 KB所以放在堆上而不是栈上——这也是它支持长路径的原因。3 条命令为每个 ZIP 建独立目录每个包解压到一个以包名命名的子目录避免同目录下的文件互相覆盖DestDir : OutRoot \ Name if !FileExist(DestDir) { FileCreateDir, %DestDir% if ErrorLevel { Log(Error 建目录失败: DestDir (Err A_LastError )) Continue } }FileCreateDir背后是 source/lib/file.cpp 的同名函数先用GetFullPathName把路径规范化顺带支持正斜杠和..这类相对组件再交给FileCreateDirRecursive逐级创建父目录。目录已存在不算错误函数会返回成功——所以脚本里先FileExist判一下只为跳过创建动作。命令行调用 7z.exe用返回码代替窗口判断不用资源管理器右键菜单直接走 7-Zip 命令行。7z x的标准返回码0 成功、1 警告如文件名重复、大于 1 才是真失败RunWait, %SevenZip% x -y -o%DestDir% %ZipPath%, , Hide Code : ErrorLevel两个细节-o后面必须紧跟目标路径、中间不能有空格否则 7z 会把空格当参数分隔-y表示自动确认覆盖Hide让命令行窗口全程不弹出。RunWait会阻塞到进程结束并把它返回码写进ErrorLevel比WinWait盯窗口标题可靠——后者在中文系统里窗口名还依赖系统语言包。日志让 23 个文件的结果可追溯FileAppend按行追加失败的文件不需要回头翻 7-Zip 的控制台Log(Status, Detail ) { FormatTime, Ts, , yyyy-MM-dd HH:mm:ss FileAppend, %Ts% [%Status%] %Detail%n, %LogFile% }主流程按返回码分三支记录if Code 0 Log(OK Name .zip 返回码 0) else if Code 1 Log(Warn Name .zip 返回码 1可能有重名文件) else Log(Error Name .zip 返回码 Code)文件读写底层在 source/TextIO.cpp 的TextFile::_OpenFileAppend对应追加模式打开。完整可运行脚本#NoEnv #SingleInstance Force SetWorkingDir, %A_ScriptDir% ; ---- 配置区只需改这 5 行 ---- InboxDir : D:\Inbox OutRoot : D:\Inbox\Unpacked SevenZip : C:\Program Files\7-Zip\7z.exe LogFile : D:\Inbox\unzip.log SkipHidden : True ; ---- 扫描 ---- Log(Info 开始扫描 InboxDir) Loop, Files, %InboxDir%\*.zip, F { ZipPath : A_LoopFileFullPath if (SkipHidden and (A_LoopFileAttr 2)) Continue ; 跳过隐藏文件 FileGetBaseName, Name, %ZipPath% DestDir : OutRoot \ Name ; ---- 建独立目录 ---- if !FileExist(DestDir) { FileCreateDir, %DestDir% if ErrorLevel { Log(Error 建目录失败: DestDir (Err A_LastError )) Continue } } ; ---- 调用 7z 解压同步等待 ---- RunWait, %SevenZip% x -y -o%DestDir% %ZipPath%, , Hide Code : ErrorLevel ; ---- 按返回码记录 ---- if Code 0 Log(OK Name .zip 返回码 0) else if Code 1 Log(Warn Name .zip 返回码 1可能有重名文件) else Log(Error Name .zip 返回码 Code) } Log(Info 完成) MsgBox, 批量解压结束详见 %LogFile% ExitApp ; ---- 带时间戳的日志 ---- Log(Status, Detail ) { FormatTime, Ts, , yyyy-MM-dd HH:mm:ss FileAppend, %Ts% [%Status%] %Detail%n, %LogFile% }保存为UnzipBatch.ahk双击运行即可。v2.x 语法不同命令改成带括号的调用如果装的是 v2把配置区改成:变量赋值后再逐条核对命令形式。实际运行效果跑完 3 个测试包日志长这样2026-11-02 10:01:14 [Info] 开始扫描 D:\Inbox 2026-11-02 10:01:14 [OK] 10月流水.zip 返回码 0 2026-11-02 10:01:15 [Warn] 对账单(汇总).zip 返回码 1可能有重名文件 2026-11-02 10:01:15 [OK] 报销单.zip 返回码 0 2026-11-02 10:01:15 [Info] 完成D:\Inbox\Unpacked下的目录结构Unpacked\ ├─ 10月流水\ │ ├─ 流水.xlsx │ └─ 明细.txt ├─ 对账单(汇总)\ │ └─ 对账单.xlsx └─ 报销单\ └─ 报销单.pdf三个容易踩的坑 -o参数后不能有空格。-o %DestDir%会被 7z 当成参数分隔返回码非 0 但很难看懂报错。正确写法是-o%DestDir%路径里带空格才需要引号。RunWait表达式中的引号别省。%SevenZip%的值是C:\Program Files\7-Zip\7z.exe中间有空格AHK 会把RunWait后面的整个表达式当作一条命令行交给ShellExecute不加引号会在空格处断开表现为程序未找到。权限问题脚本自己解决不了。脚本以普通用户权限运行时访问受保护目录如ProgramData下的共享文件夹会失败FileCreateDir返回错误码 5。AHK 不会像 Windows 那样自动弹 UAC脚本里对ErrorLevel的判断已经能兜住这种情况——记录日志后跳过而不是卡死或弹框。脚本文件的编码。旧版 AHK 的 ANSI 构建只按 ANSI 编码读.ahk脚本里的中文日志会变成乱码。两个办法文件另存为 ANSI或者改用 Unicode 构建。收尾整件事被拆成四段Loop, Files扫描、FileCreateDir建目录、RunWait调 7z 同步解压、FileAppend写日志每段都有明确的输入输出失败也只影响当前这一个文件。留一个延伸问题如果目录里混着 ZIP 和 7Z 两种格式Loop, Files的通配符要写两次还是改成按A_LoopFileExt动态选解压参数更省事【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

AutoHotkey 文件完整性校验:调用 certutil 快速计算 MD5 与 SHA 哈希的完整指南
AutoHotkey 文件完整性校验:调用 certutil 快速计算 MD5 与 SHA 哈希的完整指南

AutoHotkey 文件完整性校验:调用 certutil 快速计算 MD5 与 SHA 哈希的完整指南 【免费下载链接】AutoHotkey AutoHotkey - macro-creation and automation-oriented scripting utility for Windows. 项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey … · 2026/11/3 1:46:17

PDB数据集微调实战:ByteDance-Seed/PAR 3scale_400M_pdb模型训练教程
PDB数据集微调实战:ByteDance-Seed/PAR 3scale_400M_pdb模型训练教程

PDB数据集微调实战:ByteDance-Seed/PAR 3scale_400M_pdb模型训练教程 你是否正在寻找一个强大的蛋白质结构预测模型,并且希望针对PDB数据集进行专门优化?🤔 今天我将为你详细介绍ByteDance-Seed/PAR项目中3scale_400M_pdb模型的完… · 2026/11/3 1:46:17

ColModernVBERT评估报告:视觉文档检索基准测试中的10倍性能突破
ColModernVBERT评估报告:视觉文档检索基准测试中的10倍性能突破

ColModernVBERT评估报告:视觉文档检索基准测试中的10倍性能突破 ColModernVBERT作为ModernVBERT套件的晚交互版本,专为视觉文档检索任务优化,在保持250M参数紧凑规模的同时,实现了与10倍参数量模型相当的性能突破。本文将从模型架… · 2026/11/3 1:46:17

Higgsfield CLI浏览器游戏发布:ZIP上传、Marketplace上架与3D动画目录,终端完成游戏上线
Higgsfield CLI浏览器游戏发布:ZIP上传、Marketplace上架与3D动画目录,终端完成游戏上线

【免费下载链接】cli Higgsfield CLI 项目地址: https://gitcode.com/gh_mirrors/cli419/cli 点击查看 免费下载 Higgsfield CLI 是一款终端工具,本次更新的浏览器游戏发布功能让你无需打开网页后台,就能完成三件事:ZIP 上传游戏… · 2026/11/3 2:22:23

中医养生系统|基于springboot + vue中医养生系统(源码+数据库+文档)
中医养生系统|基于springboot + vue中医养生系统(源码+数据库+文档)

中医养生系统 目录 基于springboot vue中医养生系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue中医养生系统 一、前言 博主介绍:✌… · 2026/11/3 2:22:23

ESP32 开发第一程:4 个关卡从点亮 LED 到无线更新固件
ESP32 开发第一程:4 个关卡从点亮 LED 到无线更新固件

ESP32 开发第一程:4 个关卡从点亮 LED 到无线更新固件 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 arduino-esp32 是乐鑫官方为 ESP32 系列芯片维护的 Ardu… · 2026/11/3 2:22:23

数据结构其实很简单(四): 队列——顺序队列、环形队列与链式队列
数据结构其实很简单(四): 队列——顺序队列、环形队列与链式队列

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 2:22:23

MinerU 4.0 正式发布:让复杂文档成为 Agent 可用的知识基础设施
MinerU 4.0 正式发布:让复杂文档成为 Agent 可用的知识基础设施

MinerU 是上海人工智能实验室 OpenDataLab 团队开源的智能文档解析工具,也是开源社区中最受欢迎的复杂文档解析工具之一。它面向 PDF、图片、办公文档、网页、电子书等复杂文档,提供结构化解析与内容提取能力。目前,MinerU 已获得超过 8 万 G… · 2026/11/3 2:22:23

透视每一个请求:OpenRouter ai-sdk-provider调试模式echo_upstream_body实战
透视每一个请求:OpenRouter ai-sdk-provider调试模式echo_upstream_body实战

【免费下载链接】ai-sdk-provider The OpenRouter provider for the Vercel AI SDK contains support for hundreds of models through the OpenRouter chat and completion APIs. 项目地址: https://gitcode.com/gh_mirrors/ai/ai-sdk-provider 点击查看 免费下载 … · 2026/11/3 2:21:23

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码