我正在尝试将密码生成器集成到我的批处理文件中,以便它生成多个密码。
不幸的是它给出了以下错误:
\/?' was unexpected at this time.
预期输出为多行(1000 行)形式:
随机字符串为{password}
其中{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
我该如何解决这个错误?
答案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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 括号- 使用括号/方括号对表达式进行分组。
答案2
您可以使用 PowerShell 做一些更简单的事情吗?
$randomObj = New-Object System.Random
$NewPassword=""
1..12 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) }
$NewPassword