NSIS-如何递归地包括仅来自源文件夹和子文件夹的所有文件



每个人。我正在尝试将一些"parentdir"与文件一起包含到我的安装程序中。问题是:我使用/r参数来包括所有文件和文件夹,如下所示:

File /r "parentdir*.*"

此命令包括所有文件和子文件夹。

是否有机会将FILESONLY从所有子文件夹(以下示例)包括到out目录?

我拥有的是:

<dir>parentdir
  file1.txt
  file2.txt
  <dir> directory1
       file3.txt
       file4.txt
  <dir> directory2
       file5.txt
       file6.txt
       <dir> directory3
             file6.txt

我想在我的OUT目录中得到的是:

<dir>parentdir
  file1.txt
  file2.txt
  file3.txt
  file4.txt
  file5.txt
  file6.txt
  file6.txt

我已经试过这样做了:

SetOutPath "$INSTDIRparentdir"
File "parentdirdirectory1*.*"
File "parentdirdirectory2*.*"
File "parentdirdirectory2directory3*.*"

我得到了我想要的。但是

不使用子文件夹的名称有机会做到这一点吗?当脚本不知道所有子文件夹的确切名称时(如果要添加新的子文件夹),我需要它。

我可以让我的安装程序那么灵活吗?

谢谢!

您可以创建一个批处理文件(或任何其他程序),用于搜索磁盘并将File指令写入.nsh文件。.nsi将首先使用!system来执行生成.nsh的外部应用程序,然后使用!include it:

Section
SetOutPath "$INSTDIRparentdir"
!tempfile filelist
!system '"generatefilelist.bat" ".parentdir" "${filelist}"'
!include "${filelist}"
!delfile "${filelist}"
SectionEnd

批处理文件可能看起来像这样:

@echo off
FOR /R "%~1" %%A IN (*.txt) DO (
    >> "%~2" echo.File "%%~A"
)

如果模式足够简单,您不需要单独的批处理文件,您可以直接使用cmd.exe:

Section
SetOutPath "$INSTDIRparentdir"
!tempfile filelist
!system 'FOR /R ".parentdir" %A IN (*.txt) DO @( >> "${filelist}" echo.File "%~A" )'
!include "${filelist}"
!delfile "${filelist}"
SectionEnd

相关内容

最新更新