奇妙な質問がありますが、可能かどうかはわかりません。
スクリプトを書きたいです。たとえば、ipconfigをコマンドとして使用します。
このコマンドを通常実行すると、大量の出力があります。
たとえば、IPアドレスのみを表示するスクリプトが必要です。
echo Network Connection Test
ipconfig <---This would run in the background
echo Your IP Address is: (INSERT IP ADDRESS HERE)
出力は次のようになります
Network Connection Test
Your IP Address is: 192.168.1.1
これも可能ですか?
これにより、ipconfig
の出力にIPアドレスが出力されます。
@echo off
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do echo Your IP Address is: %%f
最初のIPアドレスのみを印刷するには、エコーの後に、または読みやすい形式でgoto :eof
(または:eof
の代わりにジャンプする別のラベル)を追加するだけです。
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
echo Your IP Address is: %%f
goto :eof
)
より構成可能な方法は、ipconfig /all
の出力を実際に少し解析することです。この方法では、IPアドレスが必要なアダプターを指定することもできます。
@echo off
setlocal enabledelayedexpansion
::just a sample adapter here:
set "adapter=Ethernet adapter VirtualBox Host-Only Network"
set adapterfound=false
echo Network Connection Test
for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do (
set "item=%%f"
if /i "!item!"=="!adapter!" (
set adapterfound=true
) else if not "!item!"=="!item:IP Address=!" if "!adapterfound!"=="true" (
echo Your IP Address is: %%g
set adapterfound=false
)
)
次のコードは、Windows XP以降の任意のプラットフォームの任意のロケールで動作し、ネットワークIP(おおよそ)ランダムなネットワークカードから。数ミリ秒より長くかかることはありません。
for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set NetworkIP=%%a
echo Network IP: %NetworkIP%
以下は、代わりにパブリックIPを探し、Windows 7以降のマシンで動作します。
for /f %%a in ('powershell Invoke-RestMethod api.ipify.org') do set PublicIP=%%a
echo Public IP: %PublicIP%
これらのコマンドの詳細な説明は my blog にあります。
Windows 7の場合:
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set ip=%ip:~1%
echo %ip%
pause
アドレスをすべて単独で抽出するのは少し難しいですが、IPアドレス行全体を簡単に取得できます。
英語版Windows OSですべてのIPアドレスを表示するには:
ipconfig | findstr /R /C:"IP.* Address"
Windows 7以降でIPv4またはIPv6アドレスのみを表示するには:
ipconfig | findstr /R /C:"IPv4 Address"
ipconfig | findstr /R /C:"IPv6 Address"
3つのネットワークアダプタを備えたXPマシンからの出力例を次に示します。
IP Address. . . . . . . . . . . . : 192.168.1.10
IP Address. . . . . . . . . . . . : 10.6.102.205
IP Address. . . . . . . . . . . . : 192.168.56.1
@echo off
FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i
echo Your IP Address is: %localIp%
これは、仮想ネットワークアダプターまたはVPN接続がある場合でも機能します。
FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i
echo Your IP Address is: %localIp%
これは@mousioの答えの修正です。私のネットワーク接続は永続的ではないため、文字列「IPv4 Address」がipconfigにない場合、次のアダプターのIPアドレスが表示されます。 ipconfigの結果には、アダプター間に2つの空白スペースがあります。アダプターが検出され、「IPv4アドレス」テキストの前に2行の空白行が発生した後、アダプターが欠落していると見なされます。 Windows 7 64ビットのみでテスト済み。
@dbenhamの回答からの空白行の処理: FIND.exeを使用したDOSバッチFORループは空白行を削除していますか?
@echo off
rem --- complete adapter name to find without the ending ":" ---
set adapter=Wireless LAN adapter Wireless Network Connection
rem --- token under an adapter to extract IP address from ---
set IPAddrToken=IPv4 Address
setlocal enableextensions enabledelayedexpansion
set adapterfound=false
set emptylines=0
set ipaddress=
for /f "usebackq tokens=1-3 delims=:" %%e in (`ipconfig ^| findstr /n "^"`) do (
set "item=%%f"
if /i "!item!"=="!adapter!" (
set adapterfound=true
set emptylines=0
) else if not "!item!"=="" if not "!item!"=="!item:%IPAddrToken%=!" if "!adapterfound!"=="true" (
@rem "!item:%IPAddrToken%=!" --> item with "IPv4 Address" removed
set ipaddress=%%g
goto :result
)
if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-1" (
@rem 2nd blank line after adapter found
goto :result
)
if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-0" (
@rem 1st blank line after adapter found
set emptylines=1
)
)
endlocal
:result
echo %adapter%
echo.
if not "%ipaddress%"=="" (
echo %IPAddrToken% =%ipaddress%
) else (
if "%adapterfound%"=="true" (
echo %IPAddrToken% Not Found
) else (
echo Adapter Not Found
)
)
echo.
pause
ローカルホストに加えてリモートホストのIPを取得する柔軟性が必要な場合を除き、IPCONFIG
を使用するのが適切です。 PING
を使用してwww.google.comなどから取得するには:
for /f "tokens=2 delims=[]" %%f in ('ping -4 -n 1 www.google.com ^|find /i "pinging"') do echo IP=%%f
その例の結果は次のとおりです。
IP=173.194.73.106
ローカルホストの最初のIPを取得するには、引用符なしで「www.google.com」を「%computername%」に置き換えます。前の「-4」は、可能なIPv6アドレスではなく、常にIPv4アドレスを取得することに注意してください。必要に応じて省略します。また、この手法では複数のIPアドレスを取得できないことに注意してください。それが目標である場合、NSLOOKUPを追加のコードとともに使用する必要があります。
PINGの代わりにNSLOOKUPを使用し、ホストに複数のIPアドレスがある場合、各アドレスはコンマで区切られるため、変数の最後にコンマがあります。
私はこれが古い投稿であることを知っていますが、vbscriptで同じ問題を解決しようとしているときにこれに出くわしました。複数のネットワークアダプターでこれをテストしたことはありませんが、それでも役に立つことを願っています。
for /f "delims=: tokens=2" %%a in ('ipconfig ^| findstr /R /C:"IPv4 Address"') do (set tempip=%%a)
set tempip=%tempip: =%
echo %tempip%
これはWin7を想定しています。 XPの場合、IPv4 Address
をIP Address
に置き換えます。
Windowsの1行コマンド IPアドレスを取得します。
for /F "tokens=14" %%i in ('"ipconfig | findstr IPv4"') do SET LOCAL_IP=%%i
このコマンドの後、echo %LOCAL_IP%
はIPアドレスを出力します。または、%LOCAL_IP%
をバッチスクリプトの参照変数として使用できます
あなたが言及するようにWindows OSを想定してipconfig
GrepのwindowsポートなどのUnixyユーティリティをインストールする場合は、それを実行できます。ただし、ipconfigを使用した例のような場合、複数のNICまたはVMWareなどのマシンでは混乱になります。
Powershellはあなたが望むツールかもしれません。例として here を見てください。
Linux環境の場合:
ip="$(ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -d ':' -f 2)"
または
ip="$(ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -d ':' -f 2)" | echo $ip
freeBSDの例:
ifconfig re0 | grep -v "inet6" | grep -i "inet" | awk '{print $2}'
複数のIPアドレスが構成されている場合、stdoutには複数のIPアドレスがあります。
以下はすべて、Windows XPボックスのcygwinで行われました。
これにより、IPアドレスが取得されます。単一引用符ではなく、hostnameコマンドの前後に逆引用符があることに注意してください。
ping -n 1 `hostname` | grep "Reply from " | cut -f 3 -d " " | cut -f 1 -d ":"
これにより、サブネットが取得されます。
ping -n 1 `hostname` | grep "Reply from " | cut -f 3 -d " " | cut -f "1 2 3" -d "."
以下は、ローカルネットワーク上のすべてのホストをリストします(「netmap」と呼ばれるスクリプトに入れます)。上記のサブネット行を取得して、「getsubnet」という実行可能ファイルに配置し、次のスクリプトから呼び出しました。
MINADDR=0
MAXADDR=255
SUBNET=`getsubnet`
hostcnt=0
echo Pinging all addresses in ${SUBNET}.${MINADDR}-${MAXADDR}
for i in `seq $MINADDR $MAXADDR`; do
addr=${SUBNET}.$i
ping -n 1 -w 0 $addr > /dev/null
if [ $? -ne 1 ]
then
echo $addr UP
hostcnt=$((hostcnt+1))
fi
done
echo Found $hostcnt hosts on subnet ${SUBNET}.${MINADDR}-${MAXADDR}
Ipconfigコマンドを使用してIPv4を取得します。
ヘルプリンク= for /?
ヘルプ= ipconfig /?
ここに私の方法=
for /f "tokens=1-2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set Oo=%%b
Echo %Oo%
cd "%ProgramFiles%\Mozilla Firefox"
Firefox.exe %Oo%
以下のスクリプトは、ipアドレスを変数ip_addressに保存します
@echo off
call :get_ip_address
echo %ip_address%
goto :eof
REM
REM get the ip address
REM
:get_ip_address
FOR /f "tokens=1 delims=:" %%d IN ('ping %computername% -4 -n 1 ^| find /i "reply"') do (FOR /F "tokens=3 delims= " %%g IN ("%%d") DO set ip_address=%%g)
goto :eof
このブログ投稿 からのアイデア。