在CMD中使用时如何转义密码中的特殊字符

How to escape the special characters in a password when using in CMD

我有这个密码,;d#se#&4~75EY(H[SM"%cznGB

我需要在自动创建的命令行命令中使用它。

(将其用于 TFS 发布管道,创建虚拟目录,此密码属于服务用户并作为秘密输入保存在全局变量中,TFS 将该密码字符串放在双引号中创建命令)。

很难转义其中的特殊字符。

到目前为止,我尝试的是通过 ^ 转义所有字母数字字符,并通过加倍转义 %" 字符。但到目前为止,运气不佳:(

失败的尝试列表是这些。

;d#se#&4~75EY^(H[SM""%%cznGB

;d#se#&4~75EY(H[SM\"%%cznGB

^;d^#se^#^&4^~75EY^(H^[SM""%%cznGB

^;d^#se^#^&4^~75EY^(H^[SM\"^%cznGB

^;d^#se^#^&4^~75EY^(H^[SM\"%%cznGB

^;d^#se^#^&4^~75EY^(H^[SM""^%%cznGB

;d#se#&4~75EY(H[SM"^^^%%cznGB

;d#se#&4~75EY(H[SM"^^^^%%cznGB

;d#se#&4~75EY(H[SM^""^%%cznGB

^;d^#se^#^&4^~75EY^(H^[SM^""^%%cznGB

^;d^#se^#^&4^~75EY^(H^[SM^""%%cznGB

;d#se#&4~75EY(H[SM""%%cznGB

能否帮我找到正确的转义字符串,以便在批处理中或在 CMD 中将其用作内联命令?

在有人因为我发布密码而对这个问题投反对票之前,我在发布之前编辑了很多部分。只是说:)

更新:

正如我在问题中提到的,TFS 创建了一个命令文本来为特定的 Web 应用程序将虚拟文件夹访问凭据设置为 IIS。日志显示这样的命令文本。

"C:\WINDOWS\system32\inetsrv\appcmd.exe" set vdir /vdir.name:"appfolder/Files" -physicalPath:"\servername\virtualfolder" -userName:"sa_user@domain.com" -password:";d#se#&4~75EY(H[SM"%cznGB"

(我按原样输入密码,用于此输出)

rem // enable delayed expansion to expand other poison characters safely
@Echo off & setlocal EnableExtensions EnableDelayedExpansion
rem // escape % character by doubling
Set "PW=;d#se#&4~75EY(H[SM"%%cznGB"
"C:\WINDOWS\system32\inetsrv\appcmd.exe"  set vdir /vdir.name:"appfolder/Files" -physicalPath:"\servername\virtualfolder" -userName:"sa_user@domain.com" -password:"!PW!"
Endlocal

这个所有字符转义的东西多么有趣! 我继续搜索,阅读我能找到的所有内容。结果是所有应该用双引号转义的都是双引号本身...

(如果我遗漏了什么,请纠正我,这对我来说是正确的)

应该在 TFS 变量中使用的结果字符串(我测试过,它有效!)是这样的:

;d#se#&4~75EY(H[SM""%cznGB

我唯一添加到原始密码的是双引号附近的另一个双引号。

这个答案对我很有帮助。难怪为什么自己做实验比阅读大量文章更有效:/

感谢所有对此主题发表评论并留下答案的人。