Пакетный файл в случае ошибки

Итак, я работаю над проектом, и я делаю это, и я добираюсь до оператора if в confirmOne, и он дает мне «( в это время не ожидалось». Пожалуйста, помогите!

Многие из бродячих "Ты попал сюда!" сообщения от меня, пытаясь отладить его. Мне очень нужно это в ближайшее время. Пожалуйста помоги. Я также пытался удалить части, и это все еще не работает. Если вы видите какие-либо другие ошибки, пожалуйста, сообщите мне, так как мне нужна вся помощь, которую я могу получить. Благодарю вас!

:grabInput
echo Please enter the username of the user you wish to access.

REM - } End Echoing Information/Main Menu | Grab Input {

set /p result=
goto correctName

REM - } End Grab Input | Process Input {

:correctName
set /p input=%result%
goto confirmOne
:confirmOne
echo Got to confirmOne
pause
if %input%==[] (
  pause
  cls
  echo Oops! Looks like you didn't enter anything! Try Agian!
  echo.
  echo ................................................................................
  echo.
  goto grabInput
) ELSE (
  goto confirmTwo
)


:confirmTwo
echo Got to ConfirmTwo
pause
if %input%==~help (
  goto helpMenu
) ELSE (
  goto confirmThree
)

:confirmThree
echo Got to ConfirmThree
if %input%==~info (
  goto infoMenu
) ELSE (
  goto swapDrive
)

person user2263904    schedule 09.04.2013    source источник


Ответы (2)


Что ж, если вы ничего не ввели для %input%, то ваше утверждение if будет выглядеть как if ==[] (.

Ваше заявление if должно выглядеть как if [%input%] == [] (

Я также вижу много ненужного кода, вы должны просмотреть свой скрипт.

person BDM    schedule 09.04.2013

Пакет ВСЕГДА работает со строками.

с оператором if %input%==[], когда для %input% установлено значение [ничего] (это то, что вы пытаетесь обнаружить), партия заменяет [ничего] для %input% и получает

IF ==[] (

и сбивает с толку, потому что '(' не является оператором сравнения.

[] — это не какая-то магическая мантра. Это старый метод определения наличия параметров, так что [%1] будет равно [], если параметр отсутствует. Это не работает, когда переменная содержит пробелы или какие-либо другие символы.

if "%var%"=="" is better
if not defined var is better still

Обратите внимание, что

set /p var=

НЕ будет устанавливать var в [ничего], просто нажмите enter, это оставит var без изменений.

Отсюда это

set var=something
set /p var=

оставит var равным something. Вы должны закодировать это как

set "var="
set /p var="Some prompt "
if not defined var echo VAR is not defined

Кавычки вокруг var= гарантируют, что var НЕ будет установлено в [несколько пробелов], если в строке есть конечные пробелы.

Кроме этого, последовательность

goto somelabel
:somelabel

(строки REM не имеют значения) лишние.

поровну, в

if somecondition (goto somewhere) else (goto somewhereelse)
:somewhereelse

условие else лишнее

Пакет замечает только :label как НАЗНАЧЕНИЕ для GOTO или CALL. а в противном случае будет просто атаковать любые :label, которые он найдет, как если бы они были примечаниями.

person Magoo    schedule 10.04.2013