Пакетный код просто отказывается выполнять условия проверки ERRORLEVEL

1
3

По сути, code всегда возвращает ERR_000, что означает, что он не создал файл конфигурации для игры, и я пытался переписать его несколько раз, но безуспешно.

Я ожидал, что echo text > file.txt сработает, но файл вообще не создается.

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
title %~dp0
:CHOICE 
choice /c sn /m "Permiso= "
if %errorlevel% equ s (
    echo "permiso=si" >> config.txt
)

if %errorlevel% equ n (
    echo "permiso=no" >> config.txt
)

choice /m "Audio=Win32, Soundblaster, Realtek?" /c wsr
if %errorlevel% equ w (
    echo Hecho
    echo "audio=win32.dll" >> config.txt
)
if %errorlevel% equ s (
    echo Hecho
    echo "audio=sdblast.sys" >> config.txt
)
if %errorlevel% equ r (
    echo Hecho 
    echo "audio=realtek.dll" >> config.txt
)

if exist *.txt echo Confirmado.
if not exist *.txt echo ERR_000
call Game.exe
Гедеон
Вопрос задан8 мая 2024 г.

1 Ответ

2

Понимаю, что ваш пакетный код не работает как ожидалось с проверкой ERRORLEVEL. Давайте разберемся, в чем проблема!

Вот несколько типичных причин, почему ERRORLEVEL может вести себя непредсказуемо:

  1. Неправильное использование:

    • Проверка перед командой:ERRORLEVEL задается после завершения команды, поэтому проверка должна идти после.
    • Неверная логика: Проверка ERRORLEVEL может быть неверной. Важно понимать, как она работает: 
      • Значение 0: Указывает на успешное завершение команды.
      • Значение 1-255: Указывает на ошибку. 
      • ERRORLEVEL не всегда соответствует коду ошибки: Некоторые команды используют собственные коды, а не стандартные значения 0 или 1.
  2. Проблемы с командами:

    • Ошибки в коде команд: Пересмотрите код команд на наличие ошибок синтаксиса, неверных аргументов или неправильного порядка.
    • Некорректное использование команд: Некоторые команды могут иметь свои особенности, которые влияют на ERRORLEVEL. Например, команда dir возвращает ERRORLEVELнезависимо от того, были ли файлы найдены.
  3. Влияние перенаправления:

    • Перенаправление вывода: Если вы перенаправляете вывод команды (например, cmd /c dir > output.txt), ERRORLEVEL может быть недоступным в родительском скрипте.
    • Перенаправление ошибок: Если вы перенаправляете ошибки команды (например, cmd /c dir 2> errors.txt), ERRORLEVEL может быть недоступным в родительском скрипте.

Пример неправильного использования:

if ERRORLEVEL==0 (
  echo Команда успешно завершена.
) else (
  echo Произошла ошибка.
)
cmd /c dir 

Правильное использование:

cmd /c dir 
if ERRORLEVEL==0 (
  echo Команда успешно завершена.
) else (
  echo Произошла ошибка.
)

Как отладить:

  1. Проверьте документацию: Изучите документацию по командам, которые вы используете, чтобы узнать, как они работают с  ERRORLEVEL.
  2. Используйте echo %ERRORLEVEL%:Добавьте эту строку после каждой команды, чтобы проверить значение ERRORLEVEL.
  3. Используйте set: Используйте  setдля вывода всех переменных среды, чтобы найти, как ERRORLEVEL задается.
  4. Разбейте код на части: Разбейте ваш скрипт на более мелкие части, чтобы изолировать проблему.

Дополнительные советы:

  • Используйте if %errorlevel% EQU 0вместо if ERRORLEVEL==0 для более точного сравнения.
  • Используйте команду exit /b для установки конкретного значения ERRORLEVEL в ваших функциях.

Пожалуйста, предоставьте ваш код, чтобы я мог помочь вам более точно найти причину проблемы.

 

Вероника
Ответ получен19 сентября 2024 г.

Ваш ответ

Загрузить файл.