Нужен скрипт, чтобы пройти 31 цикл для достижения результатов - PullRequest
0 голосов
/ 05 сентября 2018

Итак, мы с приятелем (в основном, приятелем) создали сценарий для турнира, который я провожу в UT99, чтобы мы могли рандомизировать карты, за которые проголосовали, как бы мы ни столкнулись с проблемой. Когда я помещаю в список более 31 карты, он смотрит, что в случайном порядке выплевывает значение% D вместо имени карты, но 31 карта или меньше в списке никогда не вызывает проблем. У меня есть 46 карт в нашем списке. Вот строка сценария для строки. Любая помощь в том, как решить эту проблему, была бы великолепна. Мой приятель, похоже, думает, что нам нужно перейти к силовой оболочке, однако в настоящее время никого из нас там нет. Спасибо за любую помощь в этом заранее.

echo on
set loop=0
set listnum=0
if EXIST maplist.csv del maplist.csv

set /p gennum=Number of map lists to generate?

rem #=============================================================
rem #===== Get list of maps from maplist.txt
rem #=============================================================

if NOT EXIST maplist.txt echo maplist.txt not found. Please create map 
list&&pause

for /f %%a in (maplist.txt) do (
    call :build_list %%a
    )

rem #=============================================================
rem #===== Generate random numbers and create maplist.csv
rem #=============================================================

:start

set /a mnum1=%random% %% %listnum% + 1

:num2

set /a mnum2=%random% %% %listnum% + 1

if %mnum2%==%mnum1% goto num2

:num3

set /a mnum3=%random% %% %listnum% + 1

if %mnum3%==%mnum1% goto num3
if %mnum3%==%mnum2% goto num3

for /F "tokens=%mnum1%,%mnum2%,%mnum3% delims=," %%B in ("%maplist%") do 
echo %%B - %%C - %%D >> maplist.csv

set /a loop=%loop% + 1
if not %loop%==%gennum% goto start

goto end

rem #=============================================================
rem #=========== Functions
rem #=============================================================
:build_list
if "%maplist%"=="" (
    set maplist=%1
    ) else (
    set maplist=%maplist%,%1
    )

set /a listnum=%listnum% + 1

goto:eof

rem #=============================================================
rem #=========== Echo number of random map lists created and open csv
rem #=============================================================
:end
echo %gennum% lists generated

maplist.csv

1 Ответ

0 голосов
/ 05 сентября 2018

Я включил отложенное расширение и внедрил псевдомассив (как предложил Squashman). Преимущество: без ограничения токена.

@echo off
setlocal enabledelayedexpansion
REM next line for generating a "demo maplist":
(for /l %%a in (1,1,50) do echo Map%%a)>maplist.txt

set loop=0
set listnum=0
if EXIST maplist.csv del maplist.csv

set /p gennum=Number of map lists to generate?

rem #=============================================================
rem #===== Get list of maps from maplist.txt
rem #=============================================================

if NOT EXIST maplist.txt echo maplist.txt not found. Please create map list&&pause
set listnum=0
for /f %%a in (maplist.txt) do (
    set /a listnum+=1
    set map[!listnum!]=%%a
    )

rem #=============================================================
rem #===== Generate random numbers and create maplist.csv
rem #=============================================================

:start
set /a mnum1=%random% %% %listnum% + 1

:num2
set /a mnum2=%random% %% %listnum% + 1
if %mnum2%==%mnum1% goto num2

:num3
set /a mnum3=%random% %% %listnum% + 1
if %mnum3%==%mnum1% goto num3
if %mnum3%==%mnum2% goto num3

echo !map[%mnum1%]! - !map[%mnum2%]! - !map[%mnum3%]!>>maplist.csv
set /a loop+=1
if not %loop%==%gennum% goto start

goto end

rem #=============================================================
rem #=========== Echo number of random map lists created and open csv
rem #=============================================================
:end
echo %gennum% lists generated

maplist.csv

(просто примечание: CSV означает Comma Separated Values, поэтому я не ожидал бы что-то вроде alpha - beta - gamma - но, конечно, это просто общее согласие)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...