2016-12-12 8 views
1

変数がtrueに設定されているのか、それとも設定されていないのかを検出しようとしていますが、この状況が発生して設定されていないと、実行時のバッチファイルによってシステムがクラッシュします。これを修正するには?変数が設定されているかどうかを検出する方法は?

例:

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

'if /?'、特に 'if defined'を参照してください。ほとんどの人が使うテクニックは '%' SHELL% "==" true "goto SkipShell'です。' == 'の両側に常に引用符がつきます。 –

+0

'%SHELL%" == "goto NotDefined'(引用符を使う)は' SHELL'が定義されていて空でないことをチェックします。テストの感覚を 'if not ... 'で逆にすることができます。 –

答えて

0

私はゆっくりif /?を読み、これを固定する簡単な方法があり実現してきました。

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

私は、どのPCがファイルが実行されたのかを認識したいと思っています。 ありがとうございますNoodles

+2

いいえ - 残念ながら、これは意図したとおりには動作しません。 'shell'が空の場合、' if exist'は 'if exist goto skipshell'として実行されるので、' goto'が存在すれば 'skipshell'プログラムを実行しようとします。 'setx'は、**将来の' cmd'インスタンスのための変数名にも値を割り当てます - 現在のインスタンスを含む**既存のインスタンスは含まない** – Magoo

+4

'もし存在すれば'はファイルまたはディレクトリが存在する。環境変数が定義されているかどうかをチェックするには 'if defined'を使います。 'もし定義されていればSHELL goto SkipShell'(ここでは' %% '内の変数名を囲みません!) – aschipfl

関連する問題