3

サービス プロバイダーから IP アドレスを取得し、コマンド プロンプトを介して変数に入れる簡単な方法はありますか? 次のようなもの:

SET hostIP = nslookup \address
ECHO %hostIP%

または

SET hostIP = ipconfig \address
ECHO %hostIP%
4

4 に答える 4

2

Arun による回答は適切ですが、特定のホストに複数の IP が割り当てられている/関連付けられている場合、NSLOOKUP を使用すると、ホスト名の後に不正なコンマが生成されることがわかりました。

ただし、特定のホスト名から (最初に割り当てられた) IP を解決し、不正なコンマを生成しない別の方法を見つけました - PING を使用します。非常に高速で、非常に信頼性があります。

for /f "tokens=2 delims=[]" %f in ('ping -4 -n 1 %COMPUTERNAME% ^| find /i "pinging"') do echo IP=%f

ホスト名の単純な IPv4 アドレスを変数 IP に生成します。次に ECHO %IP% を実行すると、次のような IP が表示されます: IP=192.168.1.2

もちろん、バッチ スクリプトでは、単一の %f を %%f に置き換える必要があります。パイプ (「|」) 記号の前にあるカラット (「^」) に注意してください。バッチ スクリプトではパイプを解釈せず、代わりに ping ステートメントの結果を find ステートメントにパイプするために必要です。

于 2012-11-02T18:40:18.710 に答える
2
for /f "skip=1 tokens=2 delims=: " %f in ('nslookup %COMPUTERNAME% ^| find /i "Address"') do echo %f
于 2011-09-28T23:05:21.063 に答える
0

環境変数を設定するには、次のようなバッチを試してください。

ipconfig > ipconfig.out
setx IPADDR /f ipconfig.out /a 7,13
setx IPADDR /f ipconfig.out /a 7,14
setx IPMASK /f ipconfig.out /a 8,14

コマンド プロンプトを終了し、新しいプロンプトを開きます。SET を使用して、永続化された IPADDR と IPMASK を探します。変数を更新するには、バッチを再実行してコマンド プロンプトを終了する必要があります。示されている異なる座標は、Windows 2003 と Windows 2008 の IPCONFIG 出力の違いを説明しています (XP/7 でも同じように動作するはずです)。見つかった値のみが書き込まれるため、何も見つからない限り、失敗した行は問題ありません。次を使用してゲートウェイを追加します。

setx IPGATE /f ipconfig.out /a 9,12
于 2014-02-04T18:45:44.363 に答える
0

(cygwin のように) bash を使用できる場合は、バックティックを使用して、SET hostIP 行で必要なものを実行することで簡単に実行できます。

のように

export hostIP = `curl 'http://whatsmyip.net' | grep '<title' | awk '{print $8}' | sed -e 's:<.*::g'`
于 2011-09-27T20:22:47.367 に答える