Сообщение об ошибке, которое я вижу, убедившись, что эхо включено:
echo was unexpected at this time.
Это не совсем поучительно, но предполагает синтаксическую ошибку (хотя и не с echo, вероятно, с тем, что предшествует этому).
Инкапсуляция строковых переменных
Основная проблема, которую я вижу в том, что вы делаете, заключается в том, что вы проводите сравнение строк с переменными, которые могут быть пустыми, и вы не заключаете их в кавычки. Это становится синтаксической ошибкой, потому что тогда cmd запускает команду, которая выглядит как
if /I ==HELP echo Commands ^| HELP [message]
cmd не является умным в отношении переменных. Он выполняет простую замену везде, где указана переменная.
Типичный метод построения нехрупких ( надежный является завышением применительно ко всему, что касается cmd) заключается в том, чтобы заключать в кавычки значения как LHS, так и RHS, чтобы пустые значения приводили к синтаксически допустимым утверждениям.
if /I "%Command%"=="HELP" echo Commands ^| HELP [message]
Таким образом, когда происходит подстановка (для последней строки ввода), в которой Command
пусто, выполненная команда выглядит следующим образом
if /I ""=="HELP" echo Commands ^| HELP [message]
что синтаксически допустимо.
Использование / B с выходом
Возможно, вы захотите использовать EXIT /B
, а не просто EXIT
, потому что EXIT
сам по себе завершит вызывающий процесс cmd, который при тестировании обычно является вашим окном cmd. Большинство людей не хотят, чтобы это произошло. EXIT /B
завершит работу сценария без завершения процесса оболочки.