Я должен протестировать, если переменная установлена или нет. Я попробовал несколько методов, но они, кажется, перестали работать каждый раз, когда %1
окружается кавычками, такими как случай когда %1
"c:\some path with spaces"
.
IF NOT %1 GOTO MyLabel // This is invalid syntax
IF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat execution
IF %1 == GOTO MyLabel // Gives an unexpected GOTO error.
Согласно этому сайту, это поддерживаемый IF
типы синтаксиса. Так, я не вижу способ сделать это.
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
Используйте квадратные скобки вместо кавычек:
IF [%1] == [] GOTO MyLabel
Круглые скобки небезопасны : используйте только квадратные скобки.
Я обычно использую это:
IF "%1."=="." GOTO MyLabel
Если% 1 пуст, IF сравнивает "." к "." который будет оцениваться как истина.
Вы можете использовать:
IF "%~1" == "" GOTO MyLabel
для удаления внешнего набора кавычек. В целом, это более надежный метод, чем использование квадратных скобок, поскольку он сработает, даже если в переменной есть пробелы.
From IF / ?:
Если расширения команд включены, IF изменяется следующим образом:
IF [/ I] string1 compare-op string2 command IF CMDEXTVERSION number command IF DEFINED variable command
......
Условное выражение DEFINED работает просто как EXISTS, за исключением того, что принимает имя переменной среды и возвращает истину, если переменная среды определена .