Пакетний файл: ідентифікація 0 у випадково генерованому 75-значному рядку


1

У мене є пакетний сценарій, який генерує випадковий 75-значний рядковий пароль. Коли рядок пароля починається зі 0значення, яке інша частина автоматизованої установки я стає нестабільною. Мені потрібен спосіб визначити, коли найперша цифра у рядку випадкових паролів дорівнює нулю.

У моєму плані буде відхилити рядок, якщо першим його символом є а, 0і створити новий пароль.

Примітка: я знайшов пару рішень, але обидва мали для невеликих рядків менше 75 цифр.

Пакетний файл

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

set execute counter=0
:loop
Set "Chars=1234567890"
Set CharsCnt=10
Set "Pass="
For /L %%c in (1,1,75) do (
  Set /a Pnt=!Random! %% CharsCnt
  Call Set "Pass=!Pass!%%Chars:~!Pnt!,1%%"
)
Echo Password is:%Pass%
start "" https://check.pass/%pass%
goto loop

Вихідні дані

Без ведучого 0

115792089237316195423570985008687907852837564279074904382605163141518161495

З провідним 0(автоматизація стає нестабільною)

011579208923731619542357098500868790785283756427907490438260516314151816149

Відповіді:


3

"відхилити вихід, якщо в рядку є 0, і перерахувати випадковий рядок"

Оскільки ви заявляєте, що хочете визначити перший символ рядка пароля, і якщо ця перша цифра дорівнює, 0а потім генерувати ще один рядок випадкових паролів, я запропонував рішення, яке ви можете використовувати нижче.

По суті це буде. . .

  • Використовуйте змінну підрядку, щоб отримати лише перший символ рядка (тобто %var:~0,1%), а потім за допомогою оператора If перевірте, чи рівне це чи ні 0.
    • Якщо вона дорівнює, 0то goto :loopінакше обробляйте відповідно
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

set execute counter=0
:loop
Set "Chars=1234567890"
Set CharsCnt=10
Set "Pass="
For /L %%c in (1,1,75) do (
  Set /a Pnt=!Random! %% CharsCnt
  Call Set "Pass=!Pass!%%Chars:~!Pnt!,1%%"
)
if [%Pass:~0,1%]==[0] goto :loop
Echo Password is:%Pass%
echo start "" https://check.pass/%pass%
goto :loop

Примітка. Ви можете використовувати будь-яку логіку в операторі if, а не goto :loop для того, що ви хочете, щоб це робилося, якщо значення дорівнює 0 - я if [%Pass:~0,1%]==[0] goto :loop припускав, що це те, що вам потрібно, хоча так і не ясно, що ви хочете зробити, якщо він видаляє провідні нулі з рядок, якщо ви просто хочете, щоб партія відновлювала рядок без початкового нуля. Видалення ведучого 0з рядка теж можливо, але я не впевнений, чи є в рядку вимога щодо довжини символів чи що завгодно, оскільки ти кажеш, що хочеш, щоб він відновив рядок, це здається найпростішим рішенням.


Подальші ресурси


2

Найпростіше рішення, про яке я можу придумати: генеруйте одну цифру від 1-9, потім ще 74 цифри від 0-9.


1
це не те, про що я запитав
RAJA

1
Правда, але його результат повинен 1) бути функціонально однаковим, 2) відповідати всім визначеним вимогам і 3) виконувати швидше.
Крістоф Соммер

0

Так буває, що у підстановці рядків трапляється щось, про що ви хочете .. тому вам щось не пощастило і не потрібно бути великим експертом з партії, щоб це зробити.

заміна пакетної рядки описана в set /?!

C:\Users\user>set /?

........
Environment variable substitution has been enhanced as follows:

    %PATH:str1=str2%

would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2".  "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output.  "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.
........

C:\Users\user>set z=0000123

C:\Users\user>set z=%z:*0=% & echo %z%
0000123

C:\Users\user>set z=%z:*0=% & echo %z%
000123

C:\Users\user>set z=%z:*0=% & echo %z%
00123

C:\Users\user>set z=%z:*0=% & echo %z%
0123

C:\Users\user>set z=%z:*0=% & echo %z%
123

C:\Users\user>

Отже, якщо ви запускаєте рядок, як set z=123тоді, виконайте рядок, як z=%z:*0=%купу разів, як 80 разів, тоді вона видалить до 80 провідних нулів, що більш ніж достатньо, щоб покрити всі провідні нулі, які можуть бути частиною 75 цифр вашого рядка.

І в пакетному файлі, як у вашому пакетному файлі, вам доведеться використовувати !var!(для розширення змінних і %%(для підстановки рядків замість% var% (для розширення змінних) та% (у підстановці рядків), так, як і ваш пакетний файл вже є, а також той верхній рядок, як у вашому пакетному файлі з набором локальних даних, і що випливає з нього. Отже, ваш пакетний файл вже має цей штраф.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.