Crie um lote para gerar nomes

-1

Eu tenho uma lista de 15 nomes e quero executar um script que irá produzir esses nomes em um arquivo txt em ordem aleatória. Isso é muito difícil, ou até mesmo possível? Qualquer ajuda é apreciada.

Obrigado!

Mike
fonte
3
Por favor, dê mais detalhes; como estão entrando na lista de nomes?
wonea
... e qual sistema operacional?
Arjan

Respostas:

2

O arquivo de lote a seguir reorganiza e imprime aleatoriamente seus parâmetros com uma distribuição de probabilidade quase uniforme.

@echo off
setlocal enabledelayedexpansion
set i=0
for %%j in (%*) do (
    set /A i=i+1
    set name[!i!]=%%j
    set roll[!i!]=!random!
)
set length=%i%
for /L %%i in (0,1,32767) do (
    for /L %%j in (1,1,%length%) do (
        if %%i EQU !roll[%%j]! echo !name[%%j]!
    )
)

No primeiro loop, ele atribui um número aleatório a todos os parâmetros entre zero e 32767 usando a variável interna% random%. Em seguida, ele percorre todos os 'rolos' possíveis e imprime os parâmetros com números atribuídos correspondentes. Se vários parâmetros rolarem o mesmo número, eles serão ecoados na ordem em que apareceram como parâmetros.

O código é muito ineficiente, mas compacto e simples. Ao reduzir o alcance efetivo da variável aleatória, o algoritmo pode receber um aumento significativo de velocidade com o custo de aumentar a tendência para os primeiros parâmetros especificados. Ou você pode usar uma rotina de classificação adequada, como a especificada Aqui .

Se você quiser que o arquivo em lote opere em um arquivo de texto em vez de em uma lista de parâmetros, poderá percorrer a entrada com um comando for, adicionando correspondências a uma lista de cadeias de caracteres separadas, por exemplo: for /F "tokens=1 delims= " %%i in ("input.txt") do (set list=!list! %%i), em seguida, chamando o algoritmo com essa lista, por exemplo: call :randomsort %list%.

A gravação em um arquivo de saída em vez do console pode ser feita executando o programa em lote como está, redirecionando sua saída com randomsort.bat > output.txtou anexando >> output.txt para o comando echo.

Marcks Thomas
fonte