バッチファイルパスワードジェネレーターで一貫した出力が得られない


1

私はこのコードを持っています。基本的にはランダムパスワードジェネレーターです。「10」と言うパスワードの長さを入力すると、10文字の数字と記号でランダムパスワードが生成され、txtファイルに保存されます。この問題は、2つ目を作成するときに発生します。もう一度「10」のパスワード長が必要なのに、たとえば3または4のパスワードしか与えられない場合は、状況によって異なります。私はこれでどこが間違っていたのか?どんな助けも大歓迎です。

@Echo Off
mode con: cols=70 lines=25
:start
color 8a
echo ----------------------------------------------------------------------
echo --------                  Password Generator                   -------
echo ----------------------------------------------------------------------
echo.
echo.
Echo Hello %username%
set /P lengthnumberuser="What length do you want your password to be?:
cls
Setlocal EnableDelayedExpansion
Set _RNDLength=%lengthnumberuser%
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%%$$@@**
Set _Str=%_Alphanumeric%987654321
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& GOTO :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto _loop
echo.
echo.
echo.
cls
Echo Password is: !_RndAlphaNum!
set /p _detail=Please Record a description for this password:
echo.
echo %date%---%_detail%----!_RndAlphaNum! >> RandPass.txt
echo Password Saved with Details to RandPass.txt for future reference.
echo.
echo.
set /p _newpass= Would you like to create another password ?[y/n]:
cls

If /i "%_newpass%"== "y" GOTO :start else :end

:end

交換してみてください%_RNDLength%!_RNDLength!
DavidPostill

こんにちは私はここで変更If !_count! lss %_RNDLength% goto _loopし、まだ運が周り..thenのみ、この5桁二時間10最初の時間を与えなかった
アーロン・ライスを

また、次のように変更Set /a _count+=1する必要があるかもしれませんSet /a !_count!+=1
DavidPostill

回答:


1

私は長すぎる変数名が好きではありませんが、これは動作します:

@Echo Off
mode con: cols=70 lines=25
:start
color 8a
echo ----------------------------------------------------------------------
echo --------                  Password Generator                   -------
echo ----------------------------------------------------------------------
echo.
echo.
Echo Hello %username%
set /P len="What length do you want your password to be?:
cls
Setlocal EnableDelayedExpansion
Set "Chars=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$@*"
Set CharsCnt=65
Set "Pass="
For /L %%c in (1,1,%Len%) do (
  Set /a Pnt=!Random! %% CharsCnt
  Call Set "Pass=!Pass!%%Chars:~!Pnt!,1%%"
)
cls
Echo Password is: %Pass%
set /p _detail=Please Record a description for this password:
echo.
echo %date%---%_detail%----%Pass% >> RandPass.txt
echo Password Saved with Details to RandPass.txt for future reference.
echo.
echo.
set /p _newpass= Would you like to create another password ?[y/n]:
cls
If /i "%_newpass%"== "y" GOTO :start
:end

ところで:いくつかの空の行を出力し、clsは私には意味がありません。


あなたの入力を試してみましたが、私が得た出力は両方が長い第一の試み= J5 @ llZ2v%文字数10文字されている必要があります。このた:〜37,1、2回目の試み= GrXlqKMpj
アーロン・ライス

パーセント記号が問題を引き起こしていると思います。文字から削除しました。パスワード内にある場合、追加の変数を囲むと解釈されないようにエスケープする必要があります。
LotPings
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.