我想根据构建它们的文件夹来动态命名我的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
s中使用它。
字符串遵循以下格式: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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句