проверка команды ввода в пакетном файле DOS? - PullRequest
4 голосов
/ 15 марта 2012

Я использую входные аргументы в качестве команды в моем пакетном файле DOS, как я спросил в: Запустите входной параметр как команду в сценарии DOS .Это работает, однако проблема, которую я имею: проверка, если команда ввода, если она пуста.Что я делаю:

SETLOCAL
set CMD=%*
echo Running command [%CMD%]
IF "%CMD%"=="" (
 echo "Input argument missing: command"
 GOTO :end
)
echo "XXX %CMD%"

И работает:

script.bat echo "a b c"

Будет выводить:

Running command [echo "a b c"]
b was unexpected at this time.

Это происходит в условии ЕСЛИ, но почему?

Как я могу проверить, если мой ввод пуст.Я знаю, как проверить, является ли строка пустой в DOS, но по какой-то причине она не работает в этой комбинации: (
Кстати: если я уберу условие IF, оно будет работать хорошо, то есть: команда будет выполнена правильно.

  • Ed

1 Ответ

3 голосов
/ 15 марта 2012

Сначала проверьте отсутствие параметров, затем назначьте и обработайте команду:

IF .%1 == . (
 echo "Input argument missing: command"
 GOTO :eof
)

SETLOCAL    
set CMD=%*
echo Running command [%CMD%]
echo "XXX %CMD%"

Что касается «Почему?», Это потому, что кавычка в значении CMDbefore a) закрывает кавычку перед %CMD%, поэтому строка отображается как "echo "a b c"", и, таким образом, b отделяется от строки, что приводит к сбою процессора команд(Он ожидает токен сравнения, например == или EQU, но не какой-то странный b).

...