NSIS-如何递归地仅包含源文件夹和子文件夹中的所有文件?

NSIS-如何递归地仅包含源文件夹和子文件夹中的所有文件?,nsis,Nsis,各位。我正在尝试将一些“parentdir”文件包含到我的安装程序中。问题是:我使用/r参数包括所有文件和文件夹,如下所示: File /r "parentdir\*.*" SetOutPath "$INSTDIR\parentdir" File "parentdir\directory1\*.*" File "parentdir\directory2\*.*" File "parentdir\directory2\directory3\*.*" @echo off FOR /R "%~1"

各位。我正在尝试将一些“parentdir”文件包含到我的安装程序中。问题是:我使用/r参数包括所有文件和文件夹,如下所示:

File /r "parentdir\*.*"
SetOutPath "$INSTDIR\parentdir"
File "parentdir\directory1\*.*"
File "parentdir\directory2\*.*"
File "parentdir\directory2\directory3\*.*"
@echo off
FOR /R "%~1" %%A IN (*.txt) DO (
    >> "%~2" echo.File "%%~A"
)
此命令包括所有文件和子文件夹

是否有可能只将所有子文件夹(下面的示例)中的文件包含到out目录中

我得到的是:

<dir>parentdir
  file1.txt
  file2.txt
  <dir> directory1
       file3.txt
       file4.txt
  <dir> directory2
       file5.txt
       file6.txt
       <dir> directory3
             file6.txt
我得到了我想要的。但是

是否有机会不使用子文件夹的名称来执行此操作?我需要它的情况下,脚本将不知道所有子文件夹的确切名称(如果新的子文件夹将被添加)

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


谢谢大家!

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

Section
SetOutPath "$INSTDIR\parentdir"
!tempfile filelist
!system '"generatefilelist.bat" ".\parentdir" "${filelist}"'
!include "${filelist}"
!delfile "${filelist}"
SectionEnd
…批处理文件可能如下所示:

File /r "parentdir\*.*"
SetOutPath "$INSTDIR\parentdir"
File "parentdir\directory1\*.*"
File "parentdir\directory2\*.*"
File "parentdir\directory2\directory3\*.*"
@echo off
FOR /R "%~1" %%A IN (*.txt) DO (
    >> "%~2" echo.File "%%~A"
)
如果模式足够简单,您不需要单独的批处理文件,您可以直接使用cmd.exe:

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

哇,真管用!我已经试过把它和我的主代码分开。看起来很棒。我将尝试将其应用于我的主脚本。有趣的是,我已经用这个“方法”解决了主代码中的另一个问题。现在,我的脚本看起来非常复杂,我甚至不知道如何正确应用您的解决方案,但我会尝试一下。非常感谢你!