我需要一种方法来使用批处理来查看文本文件的每一行,并删除该文本文件中的一半行,随机选择要删除的行。
这是为了模拟 D&D 游戏中的锦标赛。我所需要的只是一种方法来淘汰每轮比赛的获胜者。我可以轻松地制作一个批处理文件,复制文本文件并为每一轮重命名它,但我不擅长减少一半。
编辑:我想要一个批处理文件来执行此操作,因为在桌子上手动完成会花费很多时间。此外,这款游戏非常古老,并且以角色扮演为重点,因此锦标赛中有一个 NPC 角色的实际列表,玩家们会想知道他们的朋友在比赛中的表现如何。
问题中指定的设计有缺陷。您不能随机删除一半的行,因为对于任何给定的游戏,您最终可能会获得 2 个获胜者,或者没有获胜者。输入文件必须具有指定哪些参赛者相互比赛的结构,然后必须从每次比赛中随机选择获胜者。
下面的解决方案假设每行代表一个玩家,并且对于每一轮,第 1 行播放第 2 行,第 3 行播放第 4 行,依此类推。行数必须始终为 2 的幂 >=2 (2, 4, 8, 16、32、64、...)
@echo off
setlocal enableDelayedExpansion
set "file=tournament.txt"
for /f %%C in ('find /c /v "" ^<"%file%"') do (
for /l %%N in (1 2 %%C) do (
set /p "p1="
set /p "p2="
set /a "1/(!random!%%2)" 2>nul&&echo !p1!||echo !p2!
)
) <"%file%" >"%file%.new"
move /y "%file%.new" "%file%" >nul
外循环计算行数。内部循环对从 1 到计数的奇数进行计数,因此它精确地迭代(行数除以 2)次。内部循环的输入重定向到源文件,输出重定向到临时文件。
每个内循环迭代代表锦标赛中的一场比赛。 SET /P 用于将玩家名称加载到变量中。然后将 1 除以模 2 的随机数,这将导致 50% 的时间出现除以 0 的错误。错误消息被重定向到 nul,然后使用条件运算符将一个或另一个玩家打印到输出文件。
循环完成后,临时文件将被移动以替换原始文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)