@ECHO OFF
SETLOCAL
:obno
set /a r1=%RANDOM% %% 10 + 1
:ob
for /L %%R in (1,1,%r1%) do CALL set /a n%%R=%%random%% %%%% 240 + 1
echo %r1%
echo %n1% %n2% %n3% %n4% %n5% %n6% %n7% %n8% %n9% %n10%
GOTO :EOF
С% случайным% производит случайное число 0..32767, исходный код будет тратить много времени на ожидание числа от 0 до 10. Кроме того, он может генерировать 0.
Оператор %
является используется для «модуля». В партии, вы должны удвоить его, так %random% %% 10
производит 0..9
По CALL
ИНГАМ команды, вы можете избежать необходимости setlocal enabledelayedexpansion
но вы также должны удвоить любой %
вы используете, поэтому удвоение вокруг random
и четыре раза для оператора мод.
setlocal
не строго необходимо, но что она делает обратно изменения Enviroment когда партия заканчивается, так Г1, n1..n10 просто больше не существует в среде раз шихтовых отделки.Если у вас OMITsetlocal
, то любая переменная, установленная за один проход, будет REMAIN, установленный для последующего запуска, поэтому, если ваш первый запуск устанавливает n5 (а также поэтому n1..n4), то, если второй запуск устанавливает r1 = 2, n3..n5 будет отображаться с устаревшими данными предыдущего прогона.
Наконец, если вы позволите r1 = 0, то, так как ни один из n1..n10 не установлены, команда echo %n1%...
будет решена в echo
, будет покажет echo
статус (Echo вкл/выкл). Это можно преодолеть, используя синтаксис echo(%n1%...
. Было обнаружено, что персонаж, следующий за O
, выполняет некоторые странные вещи.
echo Dot, например, является традиционным для строки новой строки. (
может показаться странным и, похоже, «разбалансировать» вложенность, но работает довольно успешно, чтобы создать новую строку с пустыми аргументами.
Что вы думаете, что не так? –