如果有人可以帮我修复脚本,我将非常感激,我想在字符串的末尾添加一个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"
答案 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!