set Clicount=32
@REM do creat client file
for /l %%a in (2,1,%Clicount%) do (
@REM get rand ASCII code.
@REM 每个循环需要一个不同的随机字符串,并把随机字符串赋到%RANDSTR%,给其它程序使用,自撸了 python 生成随机数+pyinstaller ,打包成成 rand.exe,放在.\bin 下面
@REM 下面我按网上能找到的两种做法,CMD 环境或程序输出,获取输出内容到%RANDSTR%
@REM 做法一:
.\bin\randstr.exe -l8 -d8>.\tmp\randstr.txt
set /p RANDSTR=<.\tmp\randstr.txt
del /q .\tmp\randstr.txt
@REM 方法一,在第一个循环周期内,%RANDSTR%会被正确赋值,被其它程序正确使用,
@REM 在第二个循环周期开始,会变成空值
@REM 做法二:
@FOR /F %%i IN ('.\bin\randstr.exe -l8 -d8') DO @set RANDSTR=%%i
@REM 方法二:在第一个循环周期内,%RANDSTR%可以正确被赋值
@REM 在第二个循环周期开始,%RANDSTR%不会变化,往后的循环周期,%RANDSTR%都是第一次的值
@REM 猜测是,批处理环境不能在 FOR 里面嵌套 FOR ?
@REM 怎么办? 或者有没有其他变通的方式,使得 for /l %%a in (2,1,%Clicount%)这个循环里,可以正常%RANDSTR%赋值?
@.\bin\rar a -hp%rarpasswd% -k -ep1 -m5 %clientdir%\RARpacket\x86\x86_%%a_%RANDSTR%.rar C:\xxxxx\xxxxx\x86\.
@REM End of do creat client files packet.
)
#自己随手写的随机字符串,没讲究,能用就可以了
import sys
import random
import string
helpStr = """
command: randStr -option len
option:
-l Letter,'Aa-Zz'
-d Number,'0-9'
-c Chars,'@$#_%?'
"""
letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
numbers = '0123456789'
chars = '@$#_%?'
if __name__ == '__main__':
if len(sys.argv) == 1:
print('Options error...')
print(helpStr)
sys.exit()
optionStr = (((''.join(sys.argv[1:])).replace(' ','')).replace('-','')).strip()
rChar = ''
if len(optionStr) >= 2:
optionList = []
tmpStr = ''
if optionStr[0].isalpha():
tmpStr = ''.join(optionStr[0])
for c in optionStr[1:]:
if c.isdigit():
tmpStr = tmpStr + c
if c.isalpha():
optionList.append(tmpStr)
tmpStr = c
else:
optionList.append(tmpStr)
set_optionList = list(set(optionList))
for i in set_optionList:
if i[0] == 'l':
for c in range(int(i[1:])):
randNum = random.randint(0, len(letters))
rChar += letters[randNum - 1]
if i[0] == 'd':
for c in range(int(i[1:])):
randNum = random.randint(0, len(numbers))
rChar += numbers[randNum - 1]
if i[0] == 'c':
for c in range(int(i[1:])):
randNum = random.randint(0, len(chars))
rChar += chars[randNum - 1]
if rChar:
rCharList = list(rChar)
random.shuffle(rCharList)
print(''.join(rCharList))
else:
print('Options error...')
print(helpStr)
sys.exit()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.