Postgresql 将密码作为参数传递给NSIS中的psql命令

Postgresql 将密码作为参数传递给NSIS中的psql命令,postgresql,nsis,Postgresql,Nsis,我正在尝试向NSIS中的sql命令传递输入密码。 如果我在命令行上运行psql,它类似于: psql -U postgres -v V1=username -v V2="'dbpassword'" -w -f "path\file.sql" sql文件由以下相关命令组成: CREATE USER :V1 WITH PASSWORD :V2 LOGIN NOSUPERUSER IN GROUP postgres; 如何使用变量在NSIS中执行相同的命令?我尝试了以下方法,但不起作用 nsEx

我正在尝试向NSIS中的sql命令传递输入密码。 如果我在命令行上运行psql,它类似于:

 psql -U postgres -v V1=username -v V2="'dbpassword'" -w -f "path\file.sql"
sql文件由以下相关命令组成:

CREATE USER :V1 WITH PASSWORD :V2 LOGIN NOSUPERUSER IN GROUP postgres;
如何使用变量在NSIS中执行相同的命令?我尝试了以下方法,但不起作用

nsExec::Exec 'psql -U postgres -v V1=$username -v V2=$dbpassword -w -f "path\file.sql"'

如果我使用
“'$dbpassword'
它将无法编译。

您有一个引用问题:当您尝试在命令中放入
-v V2=“$dbpassword'

nsExec::Exec 'psql -U postgres -v V1=$username -v V2=$dbpassword -w -f "path\file.sql"'
它会导致以下命令中的字符串引号不匹配:

nsExec::Exec 'psql -U postgres -v V1=$username -v V2="'$dbpassword'" -w -f "path\file.sql"'
             ^                                        ^
              `- Begining of string                    `- End of string
V2
后面的单引号之后,字符串以语法终止,因此下面的文本对于编译器来说是垃圾

诀窍在于NSIS可以处理3个不同的字符串分隔符:单引号
、双引号
和后引号
`
。 尝试在命令中使用后引号以避免单引号/双引号冲突:

nsExec::Exec `psql -U postgres -v V1=$username -v V2="'$dbpassword'" -w -f "path\file.sql"`

$dbpassword
是nsis脚本中定义的变量吗?
makensis.exe
在未编译时给出的消息是什么?是。当我使用-v V2=$dbpassword时,它会编译。但是当我运行脚本时,不会创建用户(尽管它不会抛出错误)。但它不会编译并说:当我使用-v V2=“$dbpassword”时,第…行的未终止字符串解析