将随机数添加到生成临时密码的批处理文件中

时间:2013-10-31 15:15:07

标签: batch-file random digit

如果有人可以帮我修复脚本,我将非常感激,我想在字符串的末尾添加一个4位数的随机数,实质上它是一个脚本,它读取csv文件的电子邮件地址然后创建一个PowerShell文件供我运行,但我遇到问题的部分是随机4位数字附加到密码字符串,请看下面,如果我现在运行脚本它运行没有错误但没有附加4位数随机数,可以任何人帮助我确定它的东西很小,我很遗憾,谢谢

短套壳


@echo off & setlocal EnableDelayedExpansion
for /F "delims=" %%j in ('type "Input.csv"') do (
set /A RND=%RANDOM% %% 8889 + 1111
echo.Set-MsolUser -UserPrincipalName %%j -StrongPasswordRequired $false
echo.Set-MsolUserPassword -userPrincipalName %%j -NewPassword "TTech%RND%*" -ForceChangePassword   $false
echo.Set-MsolUser -UserPrincipalName %%j -PasswordNeverExpires $true
echo.   
) >> "Output.txt"

3 个答案:

答案 0 :(得分:2)

您需要将%var%更改为!var!才能访问有效delayedexpansion的变量的动态值。

set /A RND=!RANDOM! %% 8889 + 1111

会将变量RND设置为1111..9999

echo.Set-MsolUserPassword -userPrincipalName %%j -NewPassword "TTech!RND!*" -ForceChangePassword   $false
然后

将结果值附加到TTech

或者,尝试

set RND=000!RANDOM!
...
echo.Set-MsolUserPassword -userPrincipalName %%j -NewPassword "TTech!RND:~-4!*" -ForceChangePassword   $false

将构造一个字符串000 + 0 .. 32767然后使用TTech之后的最后4个字符,这样你就可以获得前导零填充4 -digit numerics。

答案 1 :(得分:0)

将此用作随机数:

Set max=9999
Set min=1000
Set /A rand=%random% %% (max - min + 1)+ min
Echo %rand%

请记住,在for循环中,您需要使用delayedexpansion并转义括号。

 Set max=9999
 Set min=1000

 for /l %%a in (1,1,10) do (
 Set /A rand=!random! %% ^( max - min + 1 ^) + min
 Echo.!rand!
 )
 exit /b

根据Magoo的回答,您知道问题在于使用延迟变量语法而不是标准的parens。我将他的答案和我的答案结合在一起,可以轻松重复使用。

call :RandomRange 1000 9999 ret
Echo %ret%

call :RandomRange2 ret
echo %ret%
exit /b

:RandomRange min max ret
@echo off & setlocal enabledelayedexpansion
Set /A rand=!random! %% (%2 - %1 + 1) + %1
endlocal & set %3=%rand%
exit /b

:RandomRange2 ret
@echo off & setlocal enabledelayedexpansion
set rnd=000!random!
set rnd=!rnd:~-4!
endlocal & set %1=%rnd%
exit /b

希望有所帮助

答案 2 :(得分:0)

这将为您提供一个随机的4位数字:

set num=%random%%random%%random%%random%
set num=%num:~-4%

或者在循环内启用延迟扩展:

set num=!random!!random!!random!!random!
set num=!num:~-4!