Я пытаюсь исправить ошибки отсутствия метки в пакетном файле (Windows 10). В моем пакетном файле в настоящее время используется GOTO на основе переданного параметра, например:
MYSCRIPT.bat выбор1
Я пытаюсь сделать что-то простое с простым синтаксисом, чтобы вам не приходилось включать сложные меню или списки. Я надеялся сделать что-нибудь простое в командном файле, например:
GOTO% 1%
Проблема возникает, когда выбор написан с ошибкой, отсутствует (не найден). Я попробовал некоторые примеры аналогичной обработки, которые я нашел на этом сайте, но у меня либо неправильная ситуация, либо я просто не совсем понимаю, как ее применить.
Я уверен, что хотя бы один человек меня отругает за то, что я не сделал этого в PowerShell, VBasic или еще чем-нибудь. Так что я заранее прошу прощения. Честно говоря, я действительно не знаю, как делать то, что я хочу делать в любом из них. (Некоторые будут шутить, что я тоже не знаю, как это сделать в BATCH, иначе я бы не просил о помощи.)
Я пробовал использовать «FOR» для синтаксического анализа файла на предмет наличия метки, а также «IF ERRORLEVEL 1», но похоже, что он не разветвляется туда, куда нужно. Например, если метка найдена, перейдите туда; если нет, вернитесь к началу, чтобы дать возможность ввести что-нибудь еще.
Заранее благодарим за любые идеи, которые могут быть предложены.
GoTo %1 2>Nul
@Compo: если метка не существует, пакетный файл просто заканчивается. Этот метод только скрывает сообщение об ошибке ...
Невозможно обработать эту ошибку и продолжить выполнение команды goto
; только с call
:
@echo off
setlocal EnableDelayedExpansion
call :%1 2>NUL
if errorlevel 1 echo Error: label "%1" does not exist
goto :EOF
:one
echo Section one
exit /B
:two
echo Section two
exit /B
1 не может быть переменной окружения, если вы не ссылаетесь на нее с отложенным расширением. В противном случае парсер считает, что это аргумент, переданный сценарию. Несмотря на это, мы здесь не для того, чтобы писать для вас код. Мы поможем вам с любым существующим кодом, с которым у вас возникнут проблемы.