创建批次来生成名称

创建批次来生成名称

我有一份包含 15 个名字的列表,想运行一个脚本,将这些名字以随机顺序输出到 txt 文件中。这太难了吗,或者可能吗?任何帮助都非常感谢。

谢谢!

答案1

以下批处理文件以几乎均匀的概率分布随机重新排列并打印其参数。

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

在第一个循环中,它使用内置变量 %random% 为所有参数分配一个介于 0 到 32767 之间的随机数。然后,它遍历所有可能的“掷骰结果”,并打印分配有匹配数字的参数。如果多个参数掷出相同的数字,则按照它们作为参数出现的顺序回显它们。

该代码效率很低,但紧凑而简单。通过减少随机变量的有效范围,可以显著提高算法的速度,但代价是增加对第一个指定参数的偏差。或者您可以使用适当的排序例程,例如指定的排序例程这里

如果您希望批处理文件对文本文件而不是参数列表进行操作,则可以使用 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 命令来将内容写入输出文件而不是控制台。

相关内容