Что состоит в том, чтобы протестировать надлежащий путь, если параметр пуст в пакетном файле?

Я должен протестировать, если переменная установлена или нет. Я попробовал несколько методов, но они, кажется, перестали работать каждый раз, когда %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

194
задан Stephan 24 July 2018 в 05:59
поделиться

4 ответа

Используйте квадратные скобки вместо кавычек:

IF [%1] == [] GOTO MyLabel

Круглые скобки небезопасны : используйте только квадратные скобки.

272
ответ дан 23 November 2019 в 05:23
поделиться

Я обычно использую это:

IF "%1."=="." GOTO MyLabel

Если% 1 пуст, IF сравнивает "." к "." который будет оцениваться как истина.

4
ответ дан 23 November 2019 в 05:23
поделиться

Вы можете использовать:

IF "%~1" == "" GOTO MyLabel

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

137
ответ дан 23 November 2019 в 05:23
поделиться

From IF / ?:

Если расширения команд включены, IF изменяется следующим образом:

 IF [/ I] string1 compare-op string2 command 
IF CMDEXTVERSION number command 
IF DEFINED variable command 
 

......

Условное выражение DEFINED работает просто как EXISTS, за исключением того, что принимает имя переменной среды и возвращает истину, если переменная среды определена .

17
ответ дан 23 November 2019 в 05:23
поделиться