我想根据生成它们的文件夹动态命名我的EXE文件。因此,换句话说,如果我的NSIS脚本位于body {
font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif;
font-size: 22px;
color: #46545C;
}
h1 {
font-family: 'Ubuntu', 'Source Sans Pro', Helvetica, Arial, sans-serif;
font-size: 36px;
}
pre {
font-family: 'Source Code Pro', monospace;
font-size: .85em;
color: #EEEEEE;
background: #333333;
overflow: auto;
padding: 12px 18px;
}
.container {
margin: 0 auto;
padding: 0 18px;
}
.container-main {
overflow: hidden;
background: #b2a0e8;
}
.flexbox {
display: none;
}
/* Media Queries */
/* ---------------------------- */
/* Large Size */
@media screen and (min-width: 40em) {
.container-main {
display: flex;
background: #CADBD6;
}
.container {
margin: 0 50px;
}
.content {
flex: 1;
/* Comment out this width, and Chrome displays the same functionality */
width: 80%;
/* This width has the same effect */
/*width: calc(100% - 360px);*/
float: right;
}
.flexbox {
display: block;
}
}
中,而我的项目位于C:\[blah]\MyProjectDir\Nullsoft\
中,则输出NSIS可执行文件应为C:\[blah]\MyProjectDir\MyProject\
。为了简化起见,我显然混淆了名称,文件夹的结构对我们的团队具有实际意义。
基本上,我们的(已经写好了,很久以前)的NSIS脚本看起来像这样:
MyProjectDir.exe
还有一大堆可以处理诸如注册表项,安装等之类的事情。这是与我的问题有关的重要部分(因为我不想修改脚本的其余部分)。
我想将其更改为类似的内容
!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
中使用它。我需要以某种方式捕获输出到控制台(而不是在NSIS脚本中返回!define
的返回值,该返回值始终为零)。理想情况下,我不必使用外部插件,因为这将是噩梦在整个团队中进行管理。
作为一个不错的奖励,我也很希望能够操纵字符串(同样,在编译时可以在for
中使用它。
字符串遵循以下格式:!define
,但是我想将其作为SWD1234-567
存储在另一个变量中,以用于其他重命名目的。因此,从原始字符串中删除“ SW”和“-”。
我愿意接受其他建议,但是作为NSIS的新手,这就是我要提出的。
答案 0 :(得分:3)
您需要使用!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