我找到了这个批处理文件密码生成器:
rem 16 stings pwd
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set pwd=
FOR /L %%b IN (0, 1, 16) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set pwd=!pwd!%%c
)
echo pwd=%pwd%
我将其放入批处理文件中:rand.bat 但是当我从另一个批处理文件中调用 rand.bat 时,环境变量 pwd 不再可用。如何让它保留在调用批处理文件中?
答案1
退出被调用的批处理意味着Endlocal
丢弃所有创建的局部变量。
为了克服这个问题,包括一个Endlocal
命令和在同一条线上重复设置命令。
因为cmd.exe复杂的内部工作原理(通常需要 DelayedExpansion)此行在两个范围内,因此可以重新创建变量的内容。
rem 16 stings pwd
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set pwd=
FOR /L %%b IN (0, 1, 16) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set "pwd=!pwd!%%c"
)
echo pwd=%pwd%
Endlocal & set "pwd=%pwd%" & goto :Eof