set / p使用转义输入特殊字符的批处理脚本

时间:2016-01-11 15:50:22

标签: batch-file escaping

我创建了一个脚本,用于创建用户帐户以及设置帐户密码。我使用包含特殊字符的单独密码生成器。输入带有&符号的密码时脚本失败:

:: BEGIN Add/change users
set /p UserAcct=Enter User:
set /p UserFullName=Enter Users full name: 
SET /p UserPass=Enter users password: 
net user %UserAcct% %UserPass% /add /profilepath:\\%COMPUTERNAME%\users\%UserAcct% /passwordchg:no /fullname:"%UserFullName%"
wmic useraccount where "name='%UserAcct%'" set passwordexpires=false
net localgroup "Remote Desktop Users" %UserAcct% /add
:: END

用户密码为0dfp7&a#zrMd。 输出:

'a#zrMd' is not recognized as an internal or external command,
operable program or batch file.

2 个答案:

答案 0 :(得分:3)

&是一个运算符,表示"结束当前命令并连接另一个"。
在解析运算符和命令之前展开%UserPass%,这会导致问题。

您可以将&转义为^&。但这不方便,您可能必须转义字符串中的其他特殊字符。

最简单的解决方案是使用延迟扩展,这是在为命令和运算符解析行之后发生的。

:: BEGIN Add/change users
setlocal enableDelayedExpansion
set /p UserAcct=Enter User:
set /p UserFullName=Enter Users full name: 
SET /p UserPass=Enter users password: 
net user !UserAcct! !UserPass! /add /profilepath:\\!COMPUTERNAME!\users\!UserAcct! /passwordchg:no /fullname:"!UserFullName!"
wmic useraccount where "name='!UserAcct!'" set passwordexpires=false
net localgroup "Remote Desktop Users" !UserAcct! /add

答案 1 :(得分:0)

问题在于& ,您需要使用 ^ 进行转义,因此请输入 0dfp7 ^& a#zrMd 而不是 0dfp7& a#zrMd ,以使事情有效。