数字と文字の組み合わせのリストをテキスト ファイルに出力するバッチ ファイルを作成したいと考えています。
{ 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 分以内に、1,500 万を超える順列で長さ 4 まで生成することができました。
@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
おそらくこれはあなたが望むものですか?
TEST.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 から ZZ までのTEST.BAT 2
3906 の組み合わせ (厳密に言えば、統計的な意味での順列TEST.BAT 3
) を生成し、0 から ZZZ までの 242234 の組み合わせを生成することに注意してください。
テキストファイル内の文字列数(ファイルサイズ)を見積もる計算例:
パラメーターとして実行TEST.BAT
すると、生成されます5
62 ^ 5 + 62 ^ 4 + 62 ^ 3 + 62 ^ 2 + 62 ^ 1 = 931.151.402
テキスト ファイル内の文字列。