问题描述
我有一个要在[Files]
部分解决的问题。下面的代码搜索该文件夹中的所有文件,并为我的最终项目进行编译,但是出现了问题。我想要一种指定数字的方法,以便仅选择安装程序的数字较小的文件。在文件部分的代码下方,我给出了文件夹外观的示例。
[Files]
Source: "S:\Aplicativos\MACD\Conversores\*"; DestDir: "{app}"; \
Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs \
uninsneveruninstall; \
Permissions: everyone-modify
S:\Aplicativos\MACD\Conversores\
conv0365.sql
conv0366.sql
conv0367.sql
conv0368.sql
conv0369.sql
conv0370.sql
conv0371.sql
conv0372.sql
conv0373.sql
conv0374.sql
conv0375.sql
conv0376.sql
conv0377.sql
conv0378.sql
conv0379.sql
conv0380.sql
conv0381.sql
conv0382.sql
知道这一点后,我只选择小于或等于conv0377.sql
的文件。我如何在[Files]
部分中做到这一点?
解决方法
您可以使用“ Inno Setup preprocessor”来实现文件的自定义选择:
[Files]
#define FileEntry(Source) \
"Source: " + Source + "; DestDir: {app}" + NewLine
#define ProcessFile(Source,FindResult,FindHandle,Prefix,Suffix,Limit) \
FindResult \
? \
Local[0] = FindGetFileName(FindHandle),\
Local[1] = Int(Copy(Local[0],Len(Prefix)+1,Len(Local[0])-Len(Prefix+Suffix))),\
Local[2] = Source + "\" + Local[0],\
(Local[1] <= Limit ? FileEntry(Local[2]) : "") + \
ProcessFile(Source,FindNext(FindHandle),Limit) \
: \
""
#define FindFiles(Source,Limit) \
Local[0] = FindFirst(Source + "\" + Prefix + "*" + Suffix,faAnyFile),\
ProcessFile(Source,Local[0],Limit)
#emit FindFiles("S:\Applications\MACD\Converters","conv",".sql",377)