Пакетные файлы Windows: если еще
Я делаю простой пакетный файл, который требует одного аргумента (вы можете предоставить больше, но я их игнорирую).
для тестирования, это то, что у меня есть до сих пор.
if not %1 == "" (
dir /s/b %1
) else (
echo no
)
в принципе, я хочу сказать, если аргумент предоставляется, рекурсивно отображать все файлы в папке. В противном случае скажите "нет".
он работает, когда я предоставляю аргумент, но если я его не предоставлю, он просто скажет мне ( was unexpected at this time.
Я имею в виду, это работает, но я хотел хотя бы показать удобное сообщение, объясняющее, почему он не работает. Как я должен изменить код?
6 ответов:
if not %1 == "" (должно быть
if not "%1" == "" (если аргумент не задан, он полностью пуст, даже не
""(который представляет пустую строку в большинстве языков программирования). Поэтому мы используем окружающие кавычки для обнаружения пустого аргумента.
окружите свою
%1С чем-то.например:
if not "%1" == ""еще один я видел довольно часто:
if not {%1} == {}и так далее...
проблема, как вы, вероятно, догадываетесь, заключается в том, что
%1буквально заменяется пустотой. Это не "пустая строка", это на самом деле пустое место в исходном файле в этот момент.затем после замены интерпретатор пытается разобрать
ifзаявление и получает смущенный.
вы должны сделать следующее:
if "%1" == "" ( echo The variable is empty ) ELSE ( echo The variable contains %1 )
другой связанный совет-использовать " %~1 "вместо"%1". Введите " вызов /?"в командной строке в Windows, чтобы получить более подробную информацию.