NSIS如何按指定扩展名删除文件夹内的所有文件
NSIS 删除指定文件夹下特定扩展名文件的实现方法
你可以基于文件遍历逻辑,匹配扩展名后执行删除操作,以下是可直接复用的实现方案:
1. 提前引入依赖头文件
如果编译时提示GetExtension未定义,需要在脚本开头引入官方工具头文件:
!include "FileFunc.nsh"
2. 定义通用功能宏
先封装可重复调用的宏,支持自定义目标目录、待删除的扩展名:
!macro DeleteFilesByExt sTargetDir sExt ; 初始化文件查找句柄 FindFirst $0 $1 "$sTargetDir\*.*" loop_find: StrCmp $1 "" end_find ; 跳过系统默认的目录占位符 StrCmp $1 "." next_find StrCmp $1 ".." next_find ; 匹配文件扩展名 ${GetExtension} $1 $2 StrCmp $2 "${sExt}" 0 next_find ; 匹配成功则执行删除 Delete "$sTargetDir\$1" next_find: FindNext $0 $1 Goto loop_find end_find: FindClose $0 !macroend
如果需要递归遍历子目录下的对应文件,可在遍历逻辑中新增目录判断,嵌套调用该宏即可
3. 调用示例
你可以在安装/卸载逻辑的对应位置调用上述宏,比如要删除安装目录下temp文件夹内所有.tmp格式文件,调用方式如下:
; 调用宏执行删除 !insertmacro DeleteFilesByExt "$INSTDIR\temp" "tmp"
注意事项
- 调试阶段可以先把
Delete命令替换为MessageBox MB_OK打印匹配到的文件,确认筛选逻辑符合预期后再执行删除操作 - 若涉及用户个人数据的删除操作,建议新增二次确认弹窗,避免误删有效文件
内容的提问来源于stack exchange,提问作者Gianmarco
相关产品推荐
相关产品推荐

