首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NSIS - 如何在排除文件的同时递归复制?

在使用NSIS(Nullsoft Scriptable Install System)进行安装程序制作时,如果需要在排除文件的同时递归复制,可以使用以下方法:

  1. 使用File指令:

在NSIS脚本中,可以使用File指令来复制文件。例如,以下代码将复制source_folder中的所有文件和子文件夹到destination_folder

代码语言:txt
复制
SetOutPath $INSTDIR\destination_folder
File /r /x "excluded_file" "source_folder\*.*"

其中,/r表示递归复制,/x表示排除指定文件。在这个例子中,excluded_file是需要排除的文件名。

  1. 使用FindFirstFindNext指令:

如果需要更复杂的排除规则,可以使用FindFirstFindNext指令来遍历文件夹并排除不需要的文件。例如,以下代码将复制source_folder中的所有文件和子文件夹到destination_folder,但会排除所有以.开头的隐藏文件:

代码语言:txt
复制
Function exclude_hidden_files
    FindFirst $0 $1 "$INSTDIR\source_folder\*.*"
    loop:
        StrCmp $1 "" done
        StrCpy $2 $1 1
        StrCmp $2 "." exclude
        StrCmp $2 "" exclude
        push $1
        call do_copy
        pop $1
    exclude:
        FindNext $0 $1
        Goto loop
    done:
        FindClose $0
FunctionEnd

Section
    SetOutPath $INSTDIR\destination_folder
    push "$INSTDIR\source_folder"
    call exclude_hidden_files
SectionEnd

在这个例子中,exclude_hidden_files是一个自定义函数,用于遍历文件夹并排除隐藏文件。do_copy是一个未定义的函数,用于复制文件。

  1. 使用!include指令:

如果需要排除多个文件或文件夹,可以使用!include指令将文件列表存储在一个单独的文件中,并在NSIS脚本中包含该文件。例如,以下代码将复制source_folder中的所有文件和子文件夹到destination_folder,但会排除exclude_list.txt中列出的文件和文件夹:

代码语言:txt
复制
!include "exclude_list.txt"

Section
    SetOutPath $INSTDIR\destination_folder
    File /r /x "${exclude_list}" "source_folder\*.*"
SectionEnd

在这个例子中,exclude_list.txt是一个包含要排除的文件和文件夹的文本文件,其格式为exclude_list="file1.txt file2.txt folder1 folder2"

总之,在使用NSIS进行安装程序制作时,可以使用File指令、FindFirstFindNext指令以及!include指令来在排除文件的同时递归复制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • PHP递归实现文件夹的复制、删除、查看大小操作示例

    本文实例讲述了PHP递归实现文件夹的复制、删除、查看大小操作。...文件是可以复制的,文件夹是不能复制的(但可以创建),如果要达到复制文件夹的效果,就需要生成一个和原始文件夹相同目录结构的新文件夹,然后将文件按照原目录结构复制到新文件夹。...按照递归的思想,不用一开始就生成完整的目录结构,只需要遍历当前目录,发现文件夹不存在再创建即可,然后再将文件复制到对应的文件夹。...使用递归处理的逻辑是,找到当前目录下所有文件和文件夹,删除其中的所有文件,再遍历下一层目录删除所有文件……直至最后一层目录,此时整个文件夹已经没有文件了(但是文件夹还在),此时递归开始返回,每向上返回一层就删除这一层的所有空目录...,当返回到最顶层的/【本文中一些PHP版本可能是以前的,如果不是一定要,建议PHP尽量使用7.2以上的版本】/时候,递归就结束了,同时所有的文件和目录也都删除了。

    89120

    PHP递归实现文件夹的复制、删除、查看大小操作示例

    本文实例讲述了PHP递归实现文件夹的复制、删除、查看大小操作。...文件是可以复制的,文件夹是不能复制的(但可以创建),如果要达到复制文件夹的效果,就需要生成一个和原始文件夹相同目录结构的新文件夹,然后将文件按照原目录结构复制到新文件夹。...按照递归的思想,不用一开始就生成完整的目录结构,只需要遍历当前目录,发现文件夹不存在再创建即可,然后再将文件复制到对应的文件夹。...使用递归处理的逻辑是,找到当前目录下所有文件和文件夹,删除其中的所有文件,再遍历下一层目录删除所有文件……直至最后一层目录,此时整个文件夹已经没有文件了(但是文件夹还在),此时递归开始返回,每向上返回一层就删除这一层的所有空目录...,当返回到最顶层的/ /时候,递归就结束了,同时所有的文件和目录也都删除了。

    99920

    NSIS 打包脚本基础

    $PROFILE 用户的个人配置目录。一个典型的路径如 C:\Documents and Settings\Foo。 该常量在 Windows 2000 及以上有效。...如果使用了 /nonfatal 开关且当文件未找到时使用警告来代替错误 如果使用了 /a 开关,则被添加的文件的属性将会保持 如果使用了 /r 开关,匹配的文件将会在子目录里被递归的搜索。...如果目录名匹配则所有包含的内容都会被递归添加,目录结构也会被保持 使用 /x 开关可以用来来排除文件或目录 例: 将ProjectFiles目录下的所有文件释放到输出目录 SetOutPath "$...作用:创建 (递归创建) 指定的目录。...$0 "a bbbbbbbb" 3就有$0 = "a b" StrCmp 作用:比较(不区分大小写)“字串1”和“字串2”,如果两者相等,跳转到“相同时跳转的标记”,否则跳转到“不相同时跳转的标记”。

    5K60

    使用 Swift 递归搜索目录中文件的内容,同时支持 Glob 模式和正则表达式

    如果新团队中的代码库有一个 GitHub 的 CODEOWNERS 文件,可以反映拥有的每个文件或文件组。这是对了解整个框架有很大帮助,如果没有,可以尝试创建一个。...每个 OwnershipRule 结构体包含文件路径和相应的团队。搜索匹配的文件脚本使用 FileManager 遍历当前代码库中的所有 .swift 文件。...getOwnersForFile(_:_:) 函数根据文件路径和规则数组,确定文件的拥有者团队。输出结果将文件所有者为 @MyAwesomeOrg/cool-beans 的匹配文件打印输出。...通过这段脚本可以帮助开发者快速找到特定团队拥有的文件,并检查其中是否包含特定的文本。它的可扩展性取决于 CODEOWNERS 文件的格式和内容,以及要搜索的文本类型。...在未来,可以考虑添加更多的文件过滤规则或支持其他类型的文本搜索,以增强功能。例如,可以添加对不同文件类型的支持,或者实现更复杂的团队匹配逻辑。

    13032

    如何在 Linux 中使用 chown 命令递归更改文件和目录的用户和组所有权?

    您可以在 Linux 中使用 chown 命令更改文件和目录的所有权,使用起来非常简单。...owner_name:group_name folder_name让我们详细看看它,并看看如何递归地更改用户和组,如果您熟悉文件所有权和权限的概念,事情就会更容易理解。...⚠️ 您需要成为 root 或使用 sudo 来更改文件的所有权。...递归 chown要递归更改目录的所有权,请像这样使用它:chown -R new_owner_name directory_name如果您必须更改多个目录及其内容的所有权,您可以在同一行中执行此操作:chown...要递归更改目录的所有者和组及其所有内容,请使用 chown 命令,如下所示:chown -R user_name:group_name directory_name您可以使用相同的方法更改多个文件夹的所有权

    16.8K30

    【C++】Qt:基于windeployqt+nsis程序打包和发布

    1.windeployqt和nsis介绍 windeployqt是一个Qt提供的非常有用的命令行工具,用于将Qt应用程序所需的所有依赖项自动复制到应用程序的构建目录中,以便在没有Qt安装的计算机上运行应用程序...windeployqt可以自动查找并复制应用程序所需的Qt库文件、插件、QML文件以及其他依赖的库文件。...它还会自动解析应用程序的依赖关系,确保所有依赖的库文件都正确复制到目标目录中,以便应用程序能够正确运行。 使用windeployqt非常简单。...而无需手动复制所有的依赖项。...nsis我用的版本是: nsis-3.02.1(最新版nsis是包含了下面的nisedit的) 2.用nisedit制作脚本 1.新建向导脚本 2.填写应用信息 3.设置图标、语言等 4.设置目录与授权信息

    59710

    GuLoader 转向使用 NSIS 的历程

    【PE 文件中的 NSIS 压缩数据】 垃圾邮件 2021 年 11 月,攻击者开始使用 NSIS 可执行文件前,研究人员发现了一个可疑的 ZIP 文件。...【执行流程】 2022 年,攻击者转向使用 NSIS 可执行文件。例如将 NSIS 可执行文件嵌入在 ZIP 文件中或者 ISO 镜像文件中。...【ZIP 文件中的 NSIS】 【ISO 镜像文件中的 NSIS】 在压缩文件与镜像文件中嵌入可执行文件是能够进行检测逃避的,在野发现的可用于嵌入 NSIS 可执行文件的格式如下所示: 【格式列表】...【简单的 NSIS 脚本】 后来,攻击者开始使用混淆的 NSIS 脚本。在 2022 年 4 月,攻击者对其进行两次改进。首先,Shellcode 文件扩展名从 .dat 更改为随机扩展名。...【使用 cmd 或 powershell 解密】 字符串加密 此前,加密字符串位于 GuLoader 的特定位置,加密数据和加密数据长度复制并传递给解密函数。

    69530

    windows nsis安装包制作

    3.06.1/nsis-3.06.1-setup.exe 使用方式 NSIS EDIT:使用向导创建打包脚本 菜单栏: 文件 -> 新建脚本:向导 下一步 NSIS_1.png ------ 填写对应安装包信息...英语) NSIS_3.png ------ 选择对应的许可证文件 下一步 许可证文件: BOM-UTF-8格式的TXT NSIS_4.png ------ 选择安装包需要添加的文件、文件夹 下一步...文件:右侧第一个图标 文件夹:右侧第二个图标 NSIS_5.png ------ 选择需要生成的快捷方式(默认即可) 下一步 NSIS_6.png ----- 选择安装包启动参数(如果没有,...默认即可) NSIS_7.png ------ 卸载程序相关(如非特殊需要,默认即可) 下一步 NSIS_8.png ------ 保存脚本信息 完成 NSIS_9.png ------ 保存安装包脚本到磁盘...NSIS_10.png ------ 保存完成之后会自动打开刚刚创建的脚本 菜单栏: NSIS(N) -> 编译脚本 编译完成之后,底部输出框显示编译结果及保存位置 NSIS_11.png

    2.9K00

    如何使用 TmpwatchTmpreaper 删除旧文件

    什么是 tmpwatch tmpwatch 会在指定目录中递归删除指定时间段内未被访问的文件。通常,它用于自动清除临时文件系统目录,例如 /tmp 和 /var/tmp。...除非是更改文件属性,否则大多数情况下 ctime 和 mtime 会相同。 ctime(文件上次更改时间):显示文件元数据更改时间。这意味着更改文件属性的时间(如所有权或组等)。...例如,运行以下命令以递归方式删除过去 5 个小时未访问的文件。 # tmpwatch 5 /tmp 运行以下命令删除最近 10 个小时未修改的文件。...# tmpwatch -am 12 /tmp 如何在 tmpwatch 中排除目录 以下命令将删除过去 10 个小时未修改的所有文件,并排除目录。...# tmpwatch -am 10 --nodirs /home/daygeek/Downloads 如何在 tmpwatch 中排除特定路径 以下命令将删除过去 10 个小时未被修改的所有文件,除了下面排除的文件夹

    3.8K10

    C# Windows桌面应用打包指南

    在弹出的窗口中,选择发布位置,可以是本地文件夹、网络路径或者 FTP 服务器。配置应用程序的更新方式,如是否启用自动更新。...在安装项目中添加需要打包的文件(例如应用程序文件、依赖库等)。配置安装包的属性(如版本号、安装路径等)。生成安装包,Visual Studio 会创建 .msi 文件。...Inno Setup 和 NSIS第三方工具:Inno Setup 和 NSISInno Setup 和 NSIS 是两款常见的第三方打包工具,它们提供了更灵活的安装包配置选项。...使用其内置的脚本编辑器,编写安装脚本,定义要打包的文件、安装路径等。编译脚本,生成安装包。NSIS 打包步骤:下载并安装 NSIS。编写 NSIS 安装脚本,配置安装过程中的各项细节。...可能缺乏某些高级功能(如自动更新)。

    34832

    Package Easy(基于NSIS的打包工具) 使用方法(五)

    所以,新的一版V1.0.5 它来了更新内容* 解决多语言切换问题* 解决安装可以选择复制文件到指定目录* 解决无法配置NSIS路径问题* 解决在结束页面不设置监视进程时无法编译通过的问题* 新增批量删除...,批量选择,批量变更目录* 新增忽略列表,解决反复添加不需要文件问题功能说明多语言切换问题修改多语言实现方案,多语言实时切换 图片解决安装可以选择复制文件到指定目录在组件设置中可以选择已存在文件不进行复制...修复原来NSIS配置路径功能无效的问题4. 解决在结束页面不设置监视进程时无法编译通过的问题5. 新增批量删除,批量选择,批量变更目录 a. 程序集列表可以进行多条编辑或者忽略 b....文件清单详情取消行详情展示,新增相关列,新增右键菜单操作 c. 新增选择性复制文件 d....新增忽略列表结语 每次更新我都会尽最大努力去解决一些问题,目前问题来源主要是使用中的一些问题,如果各位有更好的意见建议,欢迎留言~仓库地址GitHub地址:https://github.com/tangmanger

    18610

    公司居然把所有在线音乐都屏蔽了,所以我决定......

    如何将应用程序打包(Win) 1、关于package.js文件详解 完整实例如下: "build": { "productName":"xxxx",//项目名 这也是生成的exe文件的前缀名..."output": "build" }, "nsis": { "oneClick": false, // 是否一键安装 "allowElevation": true...打包 electron-builder比electron-packager有更丰富的的功能,支持更多的平台,同时也支持了自动更新。...「特点:」 1、electron-builder 可以打包成msi、exe、dmg文件,macOS系统,只能打包dmg文件,window系统才能打包exe,msi文件; 2、几乎支持了所有平台的所有格式...整体感受 万事开头难,在开发环境的搭建及应用程序的打包方面花费的时间是最多,目前网上的博主真的好多,但是靠谱的真的很少,大部分都是复制别人的,真的很坑。

    93220

    Notepad2替代系统自带的记事本

    事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢;但今天复制的内容中有很多数字和一些我不想要的内容...Notepad2是一个相当优秀的轻量级文本编辑器,开源软件,具有很多特色功能,如代码高亮、编码转换、行号显示、多步Ctrl+Z等,是不可多得的记事本替代方案。...而 Notepad2-mod 是 Notepad2 的修改版、更新很及时,支持代码折叠、NSIS、Inno、AHK语法高亮等。 ?...,INI, REG, INF, BAT,DIFF等众多脚本文件。...使用了几天后发现一个问题我把notepad2编辑过的txt文档发给没有安装该软件的电脑上使用时换行挂了,另外从中间复制出来的内容贴到word中去段落标记好像也有些问题。

    2K20

    Notepad2替代系统自带的记事本Notepad

    Notepad2替代系统自带的记事本Notepad 原博文链接:https://www.cnblogs.com/best/p/5819858.html 事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置...Notepad2是一个相当优秀的轻量级文本编辑器,开源软件,具有很多特色功能,如代码高亮、编码转换、行号显示、多步Ctrl+Z等,是不可多得的记事本替代方案。...而 Notepad2-mod 是 Notepad2 的修改版、更新很及时,支持代码折叠、NSIS、Inno、AHK语法高亮等。 ?..., INI, REG, INF, BAT, DIFF等众多脚本文件。    ...文档发给没有安装该软件的电脑上使用时换行挂了,另外从中间复制出来的内容贴到word中去段落标记好像也有些问题。

    3.5K20

    利用Rsync同步备份服务器数据

    对子目录以递归模式处理 -R, --relative 使用相对路径信息 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。...可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename)存放在在目录下。... 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete 删除那些DST中SRC没有的文件...--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0 -T --temp-dir=DIR 在DIR中创建临时文件 --compare-dest=DIR 同样比较DIR...--include=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除FILE中指定模式的文件 --include-from=FILE 不排除FILE指定模式匹配的文件

    2.7K10

    rsync 实现文件同步

    快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。...DST,并且文件时间晚于要备份的文件; --delete 删除那些target中有而source没有的文件; -a, --archive 归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数...可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename)存放在在目录下。...=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0 -T --temp-dir=DIR 在DIR中创建临时文件 --compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份...=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除FILE中指定模式的文件 --include-from=FILE 不排除FILE指定模式匹配的文件

    1.3K10
    领券