Пакетные файлы Windows: если еще
Я делаю простой командный файл, который требует одного аргумента (вы можете предоставить больше, но я игнорирую их).
Для тестирования это то, что у меня есть до сих пор.
if not %1 == "" (
dir /s/b %1
) else (
echo no
)
В принципе, я хочу сказать, предоставлен ли аргумент, рекурсивно отображать все файлы в папке. В противном случае, скажем нет.
Он работает, когда я предоставляю аргумент, но если я его не предоставил, он просто скажет мне ( was unexpected at this time
.
Я имею в виду, он работает, но я хотел хотя бы показать удобное для пользователя сообщение, объясняющее, почему он не работает. Как мне изменить код?
Ответы
Ответ 1
if not %1 == "" (
должен быть
if not "%1" == "" (
Если аргумент не указан, он полностью пуст, даже ""
(который представляет собой пустую строку на большинстве языков программирования). Поэтому мы используем окружающие кавычки для обнаружения пустого аргумента.
Ответ 2
Оборудуйте %1
чем-нибудь.
Например:
if not "%1" == ""
Еще один, который я видел довольно часто:
if not {%1} == {}
И так далее...
Проблема, как вы можете догадаться, состоит в том, что %1
буквально заменяется пустотой. Это не "пустая строка", на самом деле это пустое место в исходном файле.
Затем после замены интерпретатор пытается проанализировать инструкцию if
и запутаться.
Ответ 3
Вы должны сделать следующее:
if "%1" == "" (
echo The variable is empty
) ELSE (
echo The variable contains %1
)
Ответ 4
Другим связанным советом является использование "% ~ 1" вместо "% 1". Введите "CALL/?" в командной строке в Windows, чтобы получить более подробную информацию.
Ответ 5
Альтернативой было бы установить переменную и проверить, определено ли это:
SET ARG=%1
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined")
К сожалению, использование %1
непосредственно с DEFINED
не работает.
Ответ 6
вам нужно сделать вот так:
если не "A% 1" == "A"
если входной аргумент% 1 равен нулю,
ваш код будет иметь проблемы.