当涉及到nsis堆栈操作时,我总是感到困惑。现在我正在编写一小段代码来修剪字符串中的尾随空格。
输入:
C:\ Program Files(x86)\ COMPANY \或C:\ Program Files(x86)\ COMPANY
输出:
C:\ Program Files(x86)\ COMPANY
工作代码 - 使用正常的if-else
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
StrCpy $0 `${_FOLDERPATH}` 1 -1
${If} $0 == "\"
StrCpy $1 `${_FOLDERPATH}` -1
StrCpy `${_FOLDERPATH}` $1
${EndIf}
!macroend
错误的代码 - 使用堆栈操作
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
Exch $0
StrCpy $2 $0 1 -1
StrCmp $2 "\" +2 +1
StrCpy $1 $0 -1
StrCpy $1 $0
Pop $0
Exch $1
!macroend
任何人都可以纠正我并指出我的错误吗?
答案 0 :(得分:1)
我认为您正在尝试将宏用作功能。一些意见/问题/提示:
Exch
来交换堆栈顶部的值而不是使用_FOLDERPATH
? 推送$ path
$ {Trimpath}
Pop $0
恢复$ 0的值,但是你调用Exch $ 1,它将使用$ 1交换堆栈顶部的值(未知值,可能是堆栈为空)。为什么??如果要将结果保存在堆栈中,只需push $1
。