У меня есть список из 15 имен, и я хочу запустить скрипт, который выведет эти имена в текстовый файл в случайном порядке. Это слишком сложно или даже возможно? Любая помощь приветствуется.
Спасибо!
Следующий пакетный файл случайным образом перераспределяет и печатает его параметры с распределением вероятности, которое почти равномерно
@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.