Пакетные файлы Windows: если еще - PullRequest
62 голосов
/ 16 апреля 2011

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

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

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

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

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

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

Ответы [ 6 ]

73 голосов
/ 16 апреля 2011
if not %1 == "" (

должно быть

if not "%1" == "" (

Если аргумент не задан, он полностью пустой, даже не "" (что представляет собой пустую строку в большинстве языков программирования). Поэтому мы используем окружающие кавычки, чтобы обнаружить пустой аргумент.

19 голосов
/ 16 апреля 2011

Окружите свои %1 чем-нибудь.

Например:

if not "%1" == ""

Еще один, который я видел довольно часто:

if not {%1} == {}

И так далее...

Проблема, как вы можете догадаться, заключается в том, что %1 буквально заменяется пустотой.Это не «пустая строка», это фактически пустое место в вашем исходном файле в этот момент.

Затем после замены интерпретатор пытается проанализировать оператор if и запутывается.

12 голосов
/ 06 сентября 2013

Вы должны сделать следующее:

if "%1" == "" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)
8 голосов
/ 14 февраля 2013

Другой связанный совет - использовать «% ~ 1» вместо «% 1». Типа "ВЫЗОВ /?" в командной строке в Windows, чтобы получить более подробную информацию.

4 голосов
/ 04 мая 2016

Альтернативой может быть установка переменной и проверка ее определения:

SET ARG=%1
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined")

К сожалению, использование %1 напрямую с DEFINED не работает.

1 голос
/ 22 января 2015

ты должен сделать так ...

если не "A% 1" == "A"

если входной аргумент% 1 равен нулю, Ваш код будет иметь проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...