変数がtrueに設定されているのか、それとも設定されていないのかを検出しようとしていますが、この状況が発生して設定されていないと、実行時のバッチファイルによってシステムがクラッシュします。これを修正するには?変数が設定されているかどうかを検出する方法は?
例:
:Shell
if %SHELL%==true goto SkipShell
SETX SHELL TRUE
:SkipShell
変数がtrueに設定されているのか、それとも設定されていないのかを検出しようとしていますが、この状況が発生して設定されていないと、実行時のバッチファイルによってシステムがクラッシュします。これを修正するには?変数が設定されているかどうかを検出する方法は?
例:
:Shell
if %SHELL%==true goto SkipShell
SETX SHELL TRUE
:SkipShell
私はゆっくりif /?
を読み、これを固定する簡単な方法があり実現してきました。
:Shell
if DEFINED SHELL goto SkipShell
SETX SHELL TRUE
:SkipShell
私は、どのPCがファイルが実行されたのかを認識したいと思っています。 ありがとうございますNoodles!
いいえ - 残念ながら、これは意図したとおりには動作しません。 'shell'が空の場合、' if exist'は 'if exist goto skipshell'として実行されるので、' goto'が存在すれば 'skipshell'プログラムを実行しようとします。 'setx'は、**将来の' cmd'インスタンスのための変数名にも値を割り当てます - 現在のインスタンスを含む**既存のインスタンスは含まない** – Magoo
'もし存在すれば'はファイルまたはディレクトリが存在する。環境変数が定義されているかどうかをチェックするには 'if defined'を使います。 'もし定義されていればSHELL goto SkipShell'(ここでは' %% '内の変数名を囲みません!) – aschipfl
'if /?'、特に 'if defined'を参照してください。ほとんどの人が使うテクニックは '%' SHELL% "==" true "goto SkipShell'です。' == 'の両側に常に引用符がつきます。 –
'%SHELL%" == "goto NotDefined'(引用符を使う)は' SHELL'が定義されていて空でないことをチェックします。テストの感覚を 'if not ... 'で逆にすることができます。 –