0

数字と文字の組み合わせのリストをテキスト ファイルに出力するバッチ ファイルを作成したいと考えています。
{ 0, ..., 9, a, ..., z, A, ..., Z} をキャラクター プールとして使用すると、62 個の固有のキャラクターができます。
語長は 1 から始まり、所定の値まで増加します。

スクリプトは から始まり、length = 1に出力さ0Zます。
次に、に進み、length = 2に出力し00ますZZ...

4

2 に答える 2

2

これは、はるかに高速な反復ソリューションです。

コールする必要はありません。各順列は一度だけ生成されます。

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
于 2012-06-15T08:55:07.333 に答える
0

おそらくこれはあなたが望むものですか?

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.txt62 行が含まれます。

0 から ZZ までのTEST.BAT 23906 の組み合わせ (厳密に言えば、統計的な意味での順列TEST.BAT 3) を生成し、0 から ZZZ までの 242234 の組み合わせを生成することに注意してください。

テキストファイル内の文字列数(ファイルサイズ)を見積もる計算例:

パラメーターとして実行TEST.BATすると、生成されます5

62 ^ 5 + 62 ^ 4 + 62 ^ 3 + 62 ^ 2 + 62 ^ 1 = 931.151.402

テキスト ファイル内の文字列。

于 2012-06-14T16:44:52.600 に答える