-2

Я пытаюсь интегрировать генератор паролей в мой пакетный файл, чтобы он генерировал несколько паролей.

К сожалению, это дает следующую ошибку:

\/?' was unexpected at this time.

Ожидаемый результат - несколько (1000) строк вида:

Случайная строка - {пароль}

Где {password} состоит из 32 случайных символов из строки _Alphanumeric .

Вот мой командный файл:

@echo off
set executecounter=0
setlocal
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789


:loop
(@Echo Off
Setlocal EnableDelayedExpansion
Set _RNDLength=32
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 Random string is !_RndAlphaNum! >> D:\password2.txt
pause 

)
set /a executecounter=%executecounter%+1
if "%executecounter%"=="1000" goto done
goto loop
:done
echo Complete!
endlocal
pause

Как я могу устранить эту ошибку?

2 ответа2

1

/?в это время произошла непредвиденная ошибка в командном файле.

Это потому, что вы использовали скобки ( и ) для группировки нескольких команд.

Ваш код содержит следующее:

(
...
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZ ... @()\/?'=-_+
)

Это означает, что неправильный ) (тот, что в set) соответствует первому открытию ( следовательно, ошибка.

Фактически вам не нужно использовать скобки ( и ) для группировки нескольких команд, если сделано несколько других небольших изменений, то есть для повторной инициализации некоторых переменных, потому что у вас есть новый внешний цикл для генерации нескольких паролей.


Фиксированный пакетный файл:

@echo off

set executecounter=0
setlocal
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

:loop

Set _RNDLength=32
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@()\/?'=-_+
Set _Str=%_Alphanumeric%987654321
SET _RndAlphaNum=
set _RND=
set _len=


:_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 Random string is !_RndAlphaNum!>> d:\password2.txt

set /a executecounter=%executecounter%+1
if "%executecounter%"=="1000" goto done
goto loop

:done

echo Complete!
endlocal
pause

Дальнейшее чтение

0

Можете ли вы использовать PowerShell для чего-то гораздо более простого?

$randomObj = New-Object System.Random
$NewPassword=""
1..12 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) }
$NewPassword

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