在Inno Setup中仅选择特定范围的编号文件

问题描述

我有一个要在[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)