Восстановление значений% random% после начала нового процесса - PullRequest
0 голосов
/ 01 марта 2019

Я тестирую следующий пакетный файл, как показано ниже.Я всегда повторяю значение num и number в начале биты, чтобы проверить, не являются ли эти переменные пустыми.Какие они есть.При первом запуске пакетный файл получает значение echo Random number = %number%, и отображается действительный номер.Если партия затем корректно завершается, указав N в качестве выбора, партия закрывается.Во время второго запуска летучей мыши правильное случайное число выбирается снова, как и ожидалось.

Неожиданно, что происходит, когда выбирается случайное число, и пакетный файл заканчивается нажатием X или завершением программы с помощью alt + f4.При повторном запуске летучей мыши выбранное случайное число в большинстве случаев будет тем же числом, которое было выбрано при первом запуске пакетного файла.Даже после set "num=" и set "number=" при запуске echo Random number = %number% выбранное число будет таким же, как и число, выбранное в первой бите.

Не думаю, что это объяснили очень хорошо, поэтомувозможно, лучший способ увидеть, что происходит, - создать и запустить летучую мышь самостоятельно.Выберите несколько случайных чисел во время вашего первого прогона.Затем принудительно закройте пакетный файл и не завершите его корректно.Когда вы снова запустите командный файл, первое выбранное случайное число прогона 2 будет тем же случайным числом, которое было сгенерировано последним при прогоне 1. Очистка переменной в начале файла bat, похоже, не решит эту проблему.Вопрос тогда в том.Как я могу гарантировать, что новое случайное число всегда генерируется независимо от того, как завершается пакетный файл?set /a num=%random% * 10 / 32768 + 1 не лучший способ установить случайное число?

@echo off
:start
set "num="
set "number="
echo old num=%num% and old number=%number%
pause
goto RAND
:RAND
cls
set /a num=%random% * 10 / 32768 + 1
set number=%num%
goto :%num%
:%num%
set "num="
echo Random number = %number%
echo.
CHOICE /M "Do you want another random number?"
IF ERRORLEVEL 2 GOTO exit
IF ERRORLEVEL 1 GOTO start
:exit
exit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...