-1

У меня есть список из 15 имен, и я хочу запустить скрипт, который выведет эти имена в текстовый файл в случайном порядке. Это слишком сложно или даже возможно? Любая помощь приветствуется.

Спасибо!

1 ответ1

2

Следующий пакетный файл случайным образом перераспределяет и печатает его параметры с распределением вероятности, которое почти равномерно

@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]!
    )
)

В первом цикле он присваивает случайное число всем параметрам от нуля до 32767, используя встроенную переменную% random%. Затем он обходит все возможные «броски» и печатает параметры с соответствующими назначенными номерами. Если несколько параметров выводят одно и то же число, они отображаются в том порядке, в котором они указаны в качестве параметров.

Код очень неэффективен, но компактен и прост. Снижая эффективный диапазон случайной величины, алгоритм может получить значительное повышение скорости за счет увеличения смещения к первым указанным параметрам. Или вы можете использовать правильную процедуру сортировки, например, указанную здесь.

Если вы хотите, чтобы пакетный файл работал с текстовым файлом, а не со списком параметров, вы можете просмотреть ввод с помощью команды for, добавив совпадения в список строк, разделенных пробелами, например: for /F "tokens=1 delims= " %%i in ("input.txt") do (set list=!list! %%i) , затем вызывает алгоритм с этим списком, например: call :randomsort %list% .

Запись в выходной файл вместо консоли может быть достигнута либо запуском пакетной программы как есть, либо перенаправив ее вывод с помощью randomsort.bat > output.txt , либо добавив >> output.txt к команде echo.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .