![创建批次来生成名称](https://linux22.com/image/1339191/%E5%88%9B%E5%BB%BA%E6%89%B9%E6%AC%A1%E6%9D%A5%E7%94%9F%E6%88%90%E5%90%8D%E7%A7%B0.png)
我有一份包含 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 命令来将内容写入输出文件而不是控制台。