首页 > 解决方案 > 如何让计算机在人而不是数字之间随机选择并且只显示一次?

问题描述

我想让计算机在人之间而不是数字之间进行选择,然后从列表中删除该名称,但我不知道我是否可以批量处理。我知道如何让它选择一个数字,但我想将人们分配给一个数字并随机分配。我还需要它才能不再打印那个人的名字,但这也超出了我的范围。这就是我所拥有的:

:main
@echo off
SET /A test=%RANDOM% * 10 / 32768 + 1
set /a Susan=1
set /a Jeff=2 
set /a Nicole=3
set /a Eric=4
set /a Craig=5
set /a Jennifer=6
set /a Haley=7
set /a Ethan=8
set /a Lois=9
set /a Ann=10

echo %test%
echo.
pause
cls
goto main

标签: batch-file

解决方案


尝试这个..

@echo off & setlocal EnableDelayedExpansion 

set "_1=Susan"
set "_2=Jeff"
set "_3=Nicole"
set "_4=Eric"
set "_5=Craig"
set "_6=Jennifer"
set "_7=Haley"
set "_8=Ethan"
set "_9=Lois"
set "_10=Ann"

:main
cls & echo/ & set "test="
set /a "test=!RANDOM!*10/32768+1"
echo/ !_%test%! & pause && goto :main

要删除列表中的名称并防止重复:


@echo off & setlocal EnableDelayedExpansion 

set "_1=Susan"
set "_2=Jeff"
set "_3=Nicole"
set "_4=Eric"
set "_5=Craig"
set "_6=Jennifer"
set "_7=Haley"
set "_8=Ethan"
set "_9=Lois"
set "_10=Ann"

:main
echo/ & set "test="
cls & set /p _!test!=<nul
set /a "test=!RANDOM!*10/32768+1"
if defined _!test! ( 
     echo/!_%test%! &  pause 
     set "_%test%=" && goto :main
    ) else (
     2>nul set _ |findstr \_[0-9]\= >nul && goto :main
     endlocal & exit /b
    ) 

推荐阅读