1

誰かが私のスクリプトを修正するのを手伝ってくれたらとても感謝しています。文字列の最後に 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"
4

3 に答える 3

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その後の最後の 4 文字を使用して、TTech先行ゼロで埋められた 4 桁の数値を取得します。

于 2013-10-31T16:42:13.443 に答える
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 の回答に基づいて、問題が標準の括弧の代わりに遅延変数構文を使用したことにあることがわかります。彼の答えと私の答えを、簡単に再利用できるいくつかの小さな関数にまとめました。

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

それが役立つことを願っています

于 2013-10-31T16:32:49.340 に答える