web-dev-qa-db-ja.com

コンピューター名の検出

バッチスクリプトで特定のホストコンピューターを使用しているかどうかを検出するにはどうすればよいですか?たとえば、コマンドhostnameを実行すると、現在のコンピューターのホスト名が表示されます。それを変数に保存したり、他のものと直接比較したりする方法はありますか?

set hostnameVar = hostname` 
 if "%hostnameVar%" == "Molly-Laptop"(エコーラップトップ)

または

ホスト名== "Molly-Potato"(Echo notlaptop)の場合

これらはどちらも機能していません。

2
PsychoData

発見したように、_%computername%_を使用できます。これは 標準のWindows環境変数 それを使用したい理由のために正確に提供されています。

さらに、そしてあなたの質問にもっと直接的に答えるために:

_set hostnameVar=hostname_は、プログラム自体の名前を変数に割り当てているため、機能しません。結果ではありません。

したがって、コマンドプロンプトで上記を入力した後、_%hostnameVar%_と入力すると、hostnameと入力/実行したのと同じように動作します(結果が表示されます)。

これが、2番目のifが機能しない理由でもあります。基本的にはIf ("hostname") == ("this text string")と言っています。テキスト文字列がプログラムの名前と一致しないため、失敗します。

そうは言っても、can FORループを使用して、コマンドの出力をバッチで変数にリダイレクトします。

_@echo off
for /f "delims=" %%i in ('hostname') do set output=%%i
if "%output%" == "Molly-Laptop" (Echo laptop)
_
2

これは、環境変数として存在する変数を設定する必要があるため、非常に複雑に思えます。

あなたがあなたの問題を解決したと確信しているので、私の提案されたコメントを見てください、これは将来に向かっている人のためにそれを書くためのより良い方法です。

IF "%COMPUTERNAME%" EQU "MOLLY-LAPTOP" ECHO Laptop
IF "%COMPUTERNAME%" EQU "MOLLY-POTATO" ECHO Not Laptop

または...

IF "%COMPUTERNAME%"=="MOLLY-LAPTOP" ECHO Laptop
IF "%COMPUTERNAME%"=="MOLLY-POTATO" ECHO Not Laptop

私は二次的な声明が好きではないので、私はこれに従います。

IF NOT "%COMPUTERNAME%" EQU "MOLLY-LAPTOP" ECHO Not Laptop

または...

IF NOT "%COMPUTERNAME%"=="MOLLY-LAPTOP" ECHO Not Laptop
1
Tyler Bible