在 Sqlcmd 中转义特殊符号

cmd*_*cmd 1 sql batch-file sql-server-2008

我有一个 bat 文件,当我安装应用程序时,它会执行一堆 sql 脚本。在安装对话框中,用户设置数据库名称、登录名和密码,然后在此 bat 文件中使用它们。这里是:

SET _server="(local)"
SET _db=dbname
SET _user=sa
SET _pswr="!#$%^&*()<>"

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regsql.exe -S %_server% -d %_db% -U %_user% -P %_pswr% -A all

"%systemdrive%\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.exe" -S %_server% -d %_db% -U %_user% -P %_pswr% -i .\createDB.sql

pause
Run Code Online (Sandbox Code Playgroud)

一切正常,直到密码不包含任何特殊符号。但如果确实如此,我会收到以下错误“用户‘sa’登录失败。”。所以很明显,密码有问题。现在的问题是:如何转义bat文件中的这些特殊符号?

PS:我尝试更换:

< - &lt;
> - &gt;
& - &amp;
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。

谢谢!

SWe*_*eko 5

您需要通过将百分号 (%) 字符和脱字号 (^) 字符加倍来转义它们。这是有问题的命令行字符的列表

SET _pswr="!#$%%^^&*()<>"
Run Code Online (Sandbox Code Playgroud)