gpt4 book ai didi

windows - 在编译时获取 NSIS 中的文件夹名称

转载 作者:可可西里 更新时间:2023-11-01 11:23:42 26 4
gpt4 key购买 nike

我想根据生成它们的文件夹动态命名我的 EXE 文件。因此,换句话说,如果我的 NSIS 脚本位于 C:\[blah]\MyProjectDir\Nullsoft\ 而我的项目位于 C:\[blah]\MyProjectDir\MyProject\ 输出的 NSIS 可执行文件应该是 MyProjectDir.exe。显然,为了简单起见,我混淆了名称,文件夹的结构对我们的团队具有实际意义。

基本上我们的(很久以前就已经写好了)NSIS 脚本看起来像这样:

!define APP_NAME "OurGUI"
!define PROJ_NAME "OurGUI"
!define PATH_TO_FILES ..\${PROJ_NAME}\bin\Debug
!define EXEC_NAME "OurGUI.exe"
OutFile "GUI_Setup.exe"

还有一大堆处理注册表项、安装等事情的东西...这是重要的部分,因为它与我的问题有关(因为我不想修改脚本的其余部分)。

我想把它改成这样

!define M_NUMBER !system "for %I in (..) do echo %~nxI"

!define APP_NAME "${M_NUMBER}/ Demo GUI"
!define PROJ_NAME "OurGUI"
!define PATH_TO_FILES ..\${PROJ_NAME}\bin\Debug
!define EXEC_NAME "M_Number.exe"
OutFile "${M_NUMBER}_GUI_Setup.exe"

我知道我的语法完全不对,但这就是我的想法。

运行命令 for %I in (..) do echo %~nxI 返回祖父目录的名称,这正是我想要的。现在我需要弄清楚如何将它存储在某种变量中,以便它可以在 !define 中使用。我需要以某种方式将输出捕获到控制台(而不是 for 的返回值,它在我的 NSIS 脚本中始终为零。理想情况下,我不必使用外部插件,因为那将是管理整个团队的噩梦。

作为一个不错的奖励,我还希望能够操作字符串(同样,在编译时,以便它可以在 !define 中使用。

字符串遵循以下格式:SWD1234-567,但我想将其作为 D1234567 存储在另一个变量中以用于其他重命名目的。因此,从原始字符串中删除“SW”和“-”。

我对其他建议持开放态度,但作为 NSIS 的新手,这就是我提出的建议。

最佳答案

你需要使用!system+!include惯用法来读取外部命令的输出:

!tempfile MYINCFILE
!system 'for %I in (..) do echo !define MYDIR "%~nxI" > "${MYINCFILE}"'
!include "${MYINCFILE}"
!delfile "${MYINCFILE}"
!echo "${MYDIR}"

预处理器对字符串的处理有限,但可以删除已知的子字符串:

!define MYDIR "SWD1234-567"
!searchreplace MYDIR2 "${MYDIR}" "SW" ""
!searchreplace MYDIR2 "${MYDIR2}" "-" ""
!echo "${MYDIR2}" ; D1234567

关于windows - 在编译时获取 NSIS 中的文件夹名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com