我创建了一个脚本,用于创建用户帐户以及设置帐户密码。我使用包含特殊字符的单独密码生成器。输入带有&符号的密码时脚本失败:
:: 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.
答案 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 ,以使事情有效。