2016-01-11 36 views
0

我創建了一個創建用戶帳戶以及設置帳戶密碼的腳本。我正在使用包含特殊字符的獨立密碼生成器。與符號輸入密碼時,腳本失敗:帶有set/p的批處理腳本輸入帶有轉義符的特殊字符

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

用戶passwd是0dfp7&a#zrMd。 輸出:

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

不打算粗魯,但你是新的,可能不知道。下次嘗試搜索你的問題?相信我,可能有幾百個關於逃避「特殊」角色的問題。 – Bloodied

回答

0

的問題是與&,你需要一個^逃避它,所以提供輸入0dfp7^&一個#zrMd而不是0dfp7 &一個#zrMd,讓事情工作。

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 
+0

我感謝你dbenham。 –