2016-04-14 17 views
1

スクリプトを使用してコマンドプロンプトから特定のルートを作成します。 そのために、私はゲートウェイとして使用できる特定のアドレスを知る必要があります。 私は、このコマンドを使用します:特定のIPアドレスにスタティックルートを追加するWindowsスクリプト

arp -a | findstr /i "a.b.c.d"

出力は次のようになります。

Interface: a.b.c.d --- 0x14

さて、私は最後のオクテットで+1を追加することにより(このIPを変更したい:そうD +1)と他のIPアドレス(またはサブネットのデフォルトゲートウェイする)

route add x.y.z.w netmask 255.255.255.255 gateway a.b.c.d+1 metric 1

初期コマンドの出力をどのように保存してIPアドレスを変更することができますか?予め

おかげ

+0

可能な重複:https://stackoverflow.com/questions/ 16847871/split-an-ip-address-into-separate-octets-into-cmd-arithmetic-in-cmd –

+1

'arp ​​-a'出力からIPアドレスを取得する方法や、あなたはそれを持っているIPアドレアで数学を実行するには?上のリンクは後者の操作方法を説明しています。それが前者なら、あなたがしようとしていることを明確にしてください。 'findstr'で使用するIPアドレスをすでに持っているようで、もう一度解析する必要はありません。 –

答えて

1
setlocal enabledelayedexpansion 

set ipaddr=a.b.c.d 

for /f "tokens=1-4 delims=." %%a in ("%ipaddr%") do (
set /a lastoctet = %%d + 1 
set "newipaddr=%%a.%%b.%%c.!lastoctet!" 
) 

route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1 

このコードは、4つの部分にアドレスを分割するFOR /Fを使用し、次に部品の一つをインクリメントするSET /Aを使用し、その後、アドレスを再構成します。コードは、すでにあなたの例ではfindstrコマンドで使用するために(IPアドレスを抽出してきた前提としています。あなたはarp出力からIPアドレスを解析するために、別のfor /fを使用することができます。

for /f "tokens=2 delims= " %%a in ('arp -a ^|findstr /i "Interface"') do set "ipaddr=%%a" 

注意をその上のコード最後のオクテットが254より大きい場合、生成されたIPアドレスは無効になる可能性があります。この状態を検出するには、forブロック内のチェックを追加する必要があります。

+0

ライアンさん、パターンを知っていれば、出力からIPアドレスだけを抽出するにはどうしたらいいですか?例えば、私は固定で始まることを知っています:a.b.cしかし動的d(a.b.c.d)。出力からこれを抽出する方法はありますか? – alexsnemos

+0

@alexsnemosそれを編集するために編集しました。 –

0

このコードでは、 IPアドレスと同じことを行うRyan Bemroseはまだ投稿されていません。

@echo off 
for /f "delims=" %%a in ('arp -a ^|findstr /i "Interface"') do (set Data=%%a) 
Call:ExtractIP "%Data%" 
Echo The IP adress is : %IP% 
pause 
Setlocal Enabledelayedexpansion 
for /f "tokens=1-4 delims=." %%a in ("%IP%") do (
set /a lastoctet = %%d + 1 
set "newipaddr=%%a.%%b.%%c.!lastoctet!" 
) 
Echo route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1 
EndLocal 
pause 
Exit /b 
::********************************************************************** 
:ExtractIP <Data> 
(
    echo wscript.echo ExtractIP("%~1"^) 
    echo Function ExtractIP(Data^) 
    echo Set objRegex = new RegExp 
    echo objRegex.Pattern = "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" 
    echo objRegex.Global = False 
    echo objRegex.IgnoreCase = True 
    echo Set Matches = objRegex.Execute(Data^) 
    echo For Each Match in Matches 
    echo ExtractIP = Match.Value 
    echo Next 
    echo End Function 
)>"%tmp%\%~n0.vbs" 
For /f "delims=" %%# in ('Cscript /nologo "%tmp%\%~n0.vbs"') do set IP=%%# 
Exit /b 
::********************************************************************** 

編集: やライアンBemroseがIPアドレスを抽出するコメントに投稿しましたように、よりシンプル:

@echo off 
for /f "tokens=2 delims= " %%a in ('arp -a ^|findstr /i "Interface"') do (set IP=%%a) 
Echo The IP adress is : %IP% 
pause 
Setlocal Enabledelayedexpansion 
for /f "tokens=1-4 delims=." %%a in ("%IP%") do (
set /a lastoctet = %%d + 1 
set "newipaddr=%%a.%%b.%%c.!lastoctet!" 
) 
Echo route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1 
EndLocal 
pause 
Exit /b 
+1

'arp'の出力の検証が心配されているのでなければ、インターフェイスラインからIPを解析するためにvbsファイルを呼び出す必要はありません。 "for/f" tokens = 2 delims = "%% a in( 'arp -a^| findstr/i"インターフェース ")do set" IP = %% a " –

+0

@RyanBemroseそれに基づいて私の答えを編集! – Hackoo

関連する問題