Ооо - столько ошибок!
Сначала добавьте дополнительную строку setlocal enabledelayedexpansion
сразу после строки @echo off
. Это имеет два эффекта - во-первых, когда ваш пакет заканчивается, ваша среда восстанавливается до исходного состояния, чтобы вы не путались с переменными, которые были установлены в предыдущих запусках. во-вторых, он включает режим delayed expansion
, в котором активируется используемый вами синтаксис !variable!
, в противном случае !
- это просто обычный символ.
Далее, приняв ввод с кетборда с set /p
, вы не знаете, вошел ли пользователь. В ваших утверждениях if
используйте if "%var%"=="value"
, который преодолевает большинство проблем ввода.
Далее, синтаксис SET "var=value"
(где значение может быть пустым) используется, чтобы гарантировать, что любые заданные пробелы НЕ включены в назначенное значение.
И небольшой совет для игр, которым требуется функция сохранения / восстановления:
Если вы зарезервируете символ в качестве префикса для переменных, которые вы хотите сохранить (например, все переменные, которые я хочу сохранить / перезагрузить, начинаются с #
), тогда все, что вам нужно сохранить , - это игра
set #>"mygamefile.txt"
и все что вам нужно перезагрузить игра
for /f "usebackqdelims=" %%a in ("mygamefile.txt") do set "%%a"
Чтобы убрать все #
переменные (полезно перед перезагрузкой игры), используйте
for /f "delims==" %%a in ('set # 2^>nul') do set "%%a="
Вы должны взглянуть на тысячи примеров кода здесь, на SO, чтобы узнать, как использовать подпрограммы - вы, похоже, используете "код спагетти".
Этот код может помочь с проверкой пароля:
for /f "tokens=1,2" %%a in (passwordfilename) do if "%%a"=="%playername%" set "playerpass=%%b"
if "%playerpass%"=="%enteredpass%" goto gameon
При этом используется один файл паролей в форме
player1 password1
player2 password2
Если player1
меняет пароль, добавьте новые данные в файл следующим образом:
player1 password1
player2 password2
player1 newpassword
и вышеупомянутая конструкция for /f
установит для playerpass
значение последний вхождения player1
найдено.
Это должно дать вам старт и избавить вас от необходимости иметь вспомогательный пакетный файл. У вас на тарелке будет достаточно реализации этих предложений, но тогда вы сможете увидеть древесину для деревьев.
К сожалению, размещение «стены кода» на SO для декодирования и восстановления часто приводит к тому, что ваш вопрос будет проигнорирован или даже проигнорирован.
И вносите изменения по одному, затем тестируйте и отлаживайте их. Небольшие шаги сделают процесс намного проще.