Batch file 带有set/p的批处理脚本,通过转义输入特殊字符

Batch file 带有set/p的批处理脚本,通过转义输入特殊字符,batch-file,escaping,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 /profile

我已经创建了一个脚本,它创建了一个用户帐户并设置了帐户密码。我正在使用一个包含特殊字符的独立密码生成器。使用符号和输入密码时,脚本失败:

:: 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
。 输出:


问题在于&,你需要用^来逃避它,因此提供输入0dfp7^&a#zrMd而不是0dfp7&a#zrMd,以使事情正常进行。

问题在于&,你需要用^来逃避它,因此,请输入0dfp7^&a#zrMd而不是0dfp7&a#zrMd,以使事情正常运行。

&
是一个表示“结束当前命令并连接另一个命令”的运算符。
在解析运算符和命令之前,会展开
%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

&
是一个运算符,表示“结束当前命令并连接另一个命令”。
在解析运算符和命令之前,会展开
%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

无意粗鲁,但你是新手,可能不知道。下次试着搜索你的问题?相信我,关于逃避“特殊”角色,可能有很多问题。无意粗鲁,但你是新手,可能不知道。下次试着搜索你的问题?相信我,关于转义“特殊”字符可能有很多问题。