我想制作一个批处理文件,将数字和字母组合的列表打印到文本文件中。
使用 { 0
, ..., 9
, a
, ..., z
, A
, ..., Z
} 作为我的字符池,我有 62 个唯一字符。
字长从 1 开始并增加到预定值。
脚本从 开始length = 1
并打印0
到Z
.
然后它继续length = 2
并打印00
到ZZ
,依此类推......
我想制作一个批处理文件,将数字和字母组合的列表打印到文本文件中。
使用 { 0
, ..., 9
, a
, ..., z
, A
, ..., Z
} 作为我的字符池,我有 62 个唯一字符。
字长从 1 开始并增加到预定值。
脚本从 开始length = 1
并打印0
到Z
.
然后它继续length = 2
并打印00
到ZZ
,依此类推......
这是一个更快的迭代解决方案。
无需呼叫。每个排列只生成一次。
我能够在不到 5 分钟的时间内生成长度为 4 的超过 1500 万个排列。
@echo off
setlocal enableDelayedExpansion
set chars=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set maxPos=61
del output.txt 2>nul
>prior.txt echo(""
for /l %%I in (1 1 %1) do (
>new.txt (
for /f %%A in (prior.txt) do for /l %%N in (0 1 %maxPos%) do echo(%%~A!chars:~%%N,1!
)
type new.txt>>output.txt
move /y new.txt prior.txt >nul
)
del prior.txt
也许这就是你想要的?
测试.BAT
@echo off
set charPool=_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set charLen=62
(for /L %%a in (1,1,%1) do (
set permutation=
call :makePermutation %%a
)) > textfile.txt
goto :EOF
:makePermutation level
setlocal EnableDelayedExpansion
set lastPermutation=%permutation%
for /L %%i in (1,1,%charLen%) do (
set permutation=!lastPermutation!!charPool:~%%i,1!
if %1 gtr 1 (
set /A newLevel=%1-1
call :makePermutation !newLevel!
) else (
echo(!permutation!
)
)
exit /B
批处理文件必须以数字作为参数开始,该参数是单位长度。
例如在使用TEST.BAT 1
文本文件时textfile.txt
包含 62 行。
注意从0到ZZTEST.BAT 2
生成3906个组合(严格来说是统计意义上的排列TEST.BAT 3
),从0到ZZZ生成242234个组合!
估计文本文件中字符串数(文件大小)的计算示例:
TEST.BAT
使用5
as 参数运行产生
62 ^ 5 + 62 ^ 4 + 62 ^ 3 + 62 ^ 2 + 62 ^ 1 = 931.151.402
文本文件中的字符串。