Подтвердить что ты не робот

Пакетные файлы Windows: если еще

Я делаю простой командный файл, который требует одного аргумента (вы можете предоставить больше, но я игнорирую их).

Для тестирования это то, что у меня есть до сих пор.

if not %1 == "" (
    dir /s/b %1
) else (
    echo no
)

В принципе, я хочу сказать, предоставлен ли аргумент, рекурсивно отображать все файлы в папке. В противном случае, скажем нет.

Он работает, когда я предоставляю аргумент, но если я его не предоставил, он просто скажет мне ( was unexpected at this time.

Я имею в виду, он работает, но я хотел хотя бы показать удобное для пользователя сообщение, объясняющее, почему он не работает. Как мне изменить код?

4b9b3361

Ответ 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 равен нулю, ваш код будет иметь проблемы.