Пакетные файлы 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, чтобы получить более подробную информацию.