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

3

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

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

(在 TFS Release pipeline 中使用它,创建一个虚拟目录,这个密码属于一个服务用户,并保存在全局变量中作为机密输入,当 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 创建一个命令文本来将虚拟文件夹访问凭据设置为 IIS,用于特定的 Web 应用程序。日志显示命令文本如下。

"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"

我输入的密码在此输出中与原始密码相同。


欢迎来到痛苦的世界...也许你想使用PowerShell? - CherryDT
是的,看起来我受到欢迎了 :) 但是我无法做到。我被困在TFS预定义的任务中,它们使用命令行创建他们的IIS命令。:( 虽然这样会更容易... - ilter
1
通常情况下,双引号 " 不需要转义。百分号通过加倍来转义,其他特殊字符(例如你的示例中只有 &)则需要在前面加上 ^。当然,这都取决于 tfs 如何处理字符串... - Stephan
@Gerhard 更新了问题,提供了输出命令文本。 - ilter
1
你是将这个命令保存在批处理文件中,还是手动从cmd运行它? - Gerhard
显示剩余13条评论
2个回答

3

这个字符转义的过程真是有趣!我一直在搜索并阅读所有相关内容。结果得出的结论是,在双引号内部的所有内容都应该被转义,包括双引号本身...

(如果我漏掉了什么,请纠正我,因为这对我的情况是正确的)

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

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

我只在原密码中加了一个双引号,放在原有的双引号旁边。

这个回答确实帮了我很多。难怪自己进行实验比阅读大量文章更有效 :/

https://dev59.com/Pmsz5IYBdhLWcg3wn5fa#15262019

感谢每个评论和回答回复这个主题的人。


好的,实际上第一个双引号已被提示消耗掉了。这就是我问这个如何使用的原因,那么我们早些时候就可以确定,但你做了好的研究,做得很好。 - Gerhard

1
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

我没有尝试过,但如果我使用cmd任务尝试一下,这可能会起作用。但我宁愿在TFS - IIS管理任务中使用它。你有没有替代方案来处理-password参数后面的双引号,例如-password="sadfdsf"? - ilter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接