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 ответа3

2

msgstr "отклонить вывод, если в строке лидирует 0 и пересчитать случайную строку"

Поскольку вы говорите, что хотите идентифицировать самый первый символ строки пароля, и если эта первая цифра равна 0 чтобы сгенерировать другую строку случайного пароля, я предоставил решение, которое вы можете использовать ниже.

По сути это будет. , ,

  • Используйте переменную Substring, чтобы получить только первый символ строки (т.е. %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.

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%(для раскрытия переменных) и%(при подстановке строк), так же, как это делает ваш командный файл, так и в верхней строке, как у вашего командного файла с setlocal и что за этим следует. Так что ваш пакетный файл уже имеет такой штраф.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .