NSIS - 如何递归仅包含源文件夹和子文件夹中的所有文件?
NSIS - how to recursively include all files only from source folder and subfolders?
各位。我正在尝试将一些 "parentdir" 与文件一起包含到我的安装程序中。问题是:我使用 /r 参数来包含所有文件和文件夹,如下所示:
File /r "parentdir\*.*"
此命令包括所有文件和子文件夹。
是否有机会仅将所有子文件夹(如下例)中的文件包含到输出目录中?
我有的是:
<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 "$INSTDIR\parentdir"
File "parentdir\directory1\*.*"
File "parentdir\directory2\*.*"
File "parentdir\directory2\directory3\*.*"
我得到了我想要的。但是
是否有机会不使用子文件夹的名称?我需要它以防脚本不知道所有子文件夹的确切名称(如果将添加新的子文件夹)。
我可以让我的安装程序如此灵活吗?
谢谢!
您可以创建一个批处理文件(或任何其他程序)来搜索磁盘并将 File
指令写入 .nsh 文件。您的 .nsi 将首先使用 !system
执行生成 .nsh 的外部应用程序,然后 !include
它:
Section
SetOutPath "$INSTDIR\parentdir"
!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 "$INSTDIR\parentdir"
!tempfile filelist
!system 'FOR /R ".\parentdir" %A IN (*.txt) DO @( >> "${filelist}" echo.File "%~A" )'
!include "${filelist}"
!delfile "${filelist}"
SectionEnd
各位。我正在尝试将一些 "parentdir" 与文件一起包含到我的安装程序中。问题是:我使用 /r 参数来包含所有文件和文件夹,如下所示:
File /r "parentdir\*.*"
此命令包括所有文件和子文件夹。
是否有机会仅将所有子文件夹(如下例)中的文件包含到输出目录中?
我有的是:
<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 "$INSTDIR\parentdir"
File "parentdir\directory1\*.*"
File "parentdir\directory2\*.*"
File "parentdir\directory2\directory3\*.*"
我得到了我想要的。但是
是否有机会不使用子文件夹的名称?我需要它以防脚本不知道所有子文件夹的确切名称(如果将添加新的子文件夹)。
我可以让我的安装程序如此灵活吗?
谢谢!
您可以创建一个批处理文件(或任何其他程序)来搜索磁盘并将 File
指令写入 .nsh 文件。您的 .nsi 将首先使用 !system
执行生成 .nsh 的外部应用程序,然后 !include
它:
Section
SetOutPath "$INSTDIR\parentdir"
!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 "$INSTDIR\parentdir"
!tempfile filelist
!system 'FOR /R ".\parentdir" %A IN (*.txt) DO @( >> "${filelist}" echo.File "%~A" )'
!include "${filelist}"
!delfile "${filelist}"
SectionEnd