在 Inno Setup 中使用通配符查找目录

Find a directory using wildcard in Inno Setup

我试图在 Inno Setup 脚本中的目录名称中使用通配符时递归地获取目录中的所有文件。

我遇到过文件名示例,但 none 目录搜索示例。

用例: 基本上,我们已将 NuGet 包用于我们的内部开发项目。因此每个项目都会制作一个 NuGet 包,供其他项目 and/or 开发人员使用。

其中一部分我们希望使用 Inno Setup 来使用 NuGet 包中的 dll and/or 文件。

例如,我们需要找到匹配"../packages/PackagesA.../"的包文件夹,例如"PackageA v1.2.0".

遇到这个 ,这几乎正是我想要的,但似乎代码在我的 Inno 脚本中不起作用。

关于如何解决这个问题的任何帮助或建议?

您可以为此定义一个 Inno Setup preprocessor function that will resolve the directory file mask. Use FindFirst function

#define FindFolder(Path) \
    Local[0] = FindFirst(Path, faDirectory), \
    Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path

[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
    flags: recursesubdirs  

如果在脚本末尾添加 SaveToFile 调用:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

...你会看到上面的代码解析为:

[Files]
Source: "..\packages\PackageA1.2.0\*.*"; DestDir: "{app}"; flags: recursesubdirs  

如果找不到这样的文件夹,代码将解析为:

[Files]
Source: "..\packages\PackageA*\*.*"; DestDir: "{app}"; flags: recursesubdirs  

... 然后编译器将失败 "No files found matching ...".