2016-12-12 1 views
1

Я пытаюсь определить, установлена ​​ли переменная в true или даже не установлена, но когда это произойдет, и она не установлена, командный файл при его запуске приведет к сбою системы. Как это исправить?Как определить, установлена ​​или нет переменная?

например:

:Shell 
if %SHELL%==true goto SkipShell 
SETX SHELL TRUE 
:SkipShell 
+2

См. 'If /?' В частности 'if defined'. Техника, используемая большинством людей, это 'if"% SHELL% "==" true "goto SkipShell', поэтому всегда будут кавычки с обеих сторон' == '. –

+0

Использование 'if '% SHELL%" == "" goto NotDefined' (т. Е. Использование кавычек) будет проверять, что 'SHELL' определен и не пуст. Вы можете изменить смысл теста на «if not ...». –

ответ

0

Я читал медленно if /? и понял, что есть простой способ фиксации этого.

:Shell 
if DEFINED SHELL goto SkipShell 
SETX SHELL TRUE 
:SkipShell 

Я делаю это, так как хочу узнать, в каком компьютере находился мой файл. Спасибо Noodles!

+2

Нет - это, к сожалению, не будет работать должным образом. Если 'shell' пуст, то' if exist' будет выполняться как 'if exist goto skipshell', поэтому он попытается выполнить программу' skipshell', если 'goto' существует. Обратите внимание, что 'setx' также присваивает значение variablename только для ** будущих **' cmd' экземпляров - не для каких-либо существующих экземпляров **, включая текущий экземпляр ** – Magoo

+4

'if exist' предназначен для проверки того, является ли файл или каталог существует; для проверки того, определена ли переменная среды, используйте 'if defined'; например: 'если определено SHELL goto SkipShell' (do * not * заключить имя переменной в' %% 'здесь!) – aschipfl