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

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

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

\/?' 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 ответа

Решение

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

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

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

(
...
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

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

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

$randomObj = New-Object System.Random
$NewPassword=""
1..12 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) }
$NewPassword
Другие вопросы по тегам