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

832
Unix

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

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

\/?' was unexpected at this time. 

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

Случайная строка -

Где состоит из 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
Да, вы сделали :)) Но это не так. Это было с другим, о котором я тебе говорил Unix 9 лет назад 0
Не помню, это было с этого сайта, но это было до того, как я сделал свой аккаунт, и с тех пор, как я закрыл браузер, больше не осталось истории. Я отредактирую это немного позже, потому что я нахожусь на мобильной связи, мне нужно пойти и заключить новый контракт сейчас: D Unix 9 лет назад 0
В любом случае я исправил это;) DavidPostill 9 лет назад 1
Я отредактировал вопрос для вас и ответил исправленным командным файлом;) DavidPostill 9 лет назад 1

2 ответа на вопрос

1
DavidPostill

/?' was unexpected at this time error in batch file.

This is because you have used brackets ( and ) to group multiple commands.

Your code contains the following:

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

This means that the wrong ) (the one in the set) is matching the first opening (, hence the error.

In fact you don't need to use brackets ( and ) to group multiple commands if a couple of other small changes are made, which is to re-initialise some variables because you have a new outer loop in order to generate multiple passwords.


Fixed batch file:

@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 

Further Reading

Извините за поздний ответ, мне пришлось посетить несколько других проектов. Спасибо за помощь, Дэвид, я попробую и свяжусь с тобой как можно скорее;) Unix 9 лет назад 0
Черт, он работает как шарм и, как я и думал, работает очень быстро, чем предыдущий код (он сгенерировал 1000 строк менее чем за 10 минут). Он станет прекрасным инструментом для проверки списка слов! Unix 9 лет назад 0
0
beeks

Can you use PowerShell for something much simpler?

$randomObj = New-Object System.Random $NewPassword="" 1..12 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) } $NewPassword 
Я никогда не использовал PowerShell. Это не выглядит удобным для меня ... Unix 9 лет назад 0
@Unix, попробуй. Это объектно-ориентированный, так что нужно немного привыкнуть. По сути, этот скрипт: 1. Создает объект типа System.Random. 2. Создает переменную с именем $ NewPassword в виде строки. 3. Повторяется 12 раз, каждый раз добавляя случайный символ в пустую строку. 4. Отображает полученную строку. beeks 9 лет назад 0

Похожие вопросы