How do I parse the octets of an IP address into environment variables on a batch file?

Greetings -

Does anyone know of a way to parse the octets of an IP address into environment variables in DOS?  There has to be some trick using loops or something to do this.  I would think... :)

What I would like to do is parse the first three octets into one environment variable and just ignore the final octet.

So if I had an IP address if, I would like to create an environment variable named %MYIP% and have it contain "192.168.100".

Is this doable?  Thanks in advance...

P.S.  If it would be easier to parse each octet into its own variable such as %OCTET1%, %OCTET2%, etc... I could use that too.  But I'd prefer to have the first three octets in one variable if possible.
Who is Participating?
amendalaConnect With a Mentor Author Commented:
They may have multiple NICs but I only want the one that Windows sees as the "primary slot" which is usually the one with a gateway defined.

I managed to write up a simple elegant solution on my own that works great!  I've included the snippet...

:: Ping the computer the batch file is running on one time and parse
:: out the IP address and assign it to environment variable %IP%.
for /f "tokens=2 delims=[]" %%i in ('ping -n 1 "%computername%"') do set IP=%%i
:: Echo %IP% to the screen and parse the tokens using a period as a
:: delimeter and assign each octet to a variable.
for /f "tokens=1 delims=." %%i in ('echo %IP%') do set OCTET1=%%i
for /f "tokens=2 delims=." %%i in ('echo %IP%') do set OCTET2=%%i
for /f "tokens=3 delims=." %%i in ('echo %IP%') do set OCTET3=%%i
for /f "tokens=4 delims=." %%i in ('echo %IP%') do set OCTET4=%%i
:: Assign octets 1 through 3 to a single variable.

Open in new window

Jared LukerCommented:
I'm not sure how to do it with Batch, but here is a way to do it with VBScript.

This will get the IP of all adapters that TCP/IP is enabled on (usually there is just one) and has a first octet of 10.  You could use the split function to break up the IP address by using a period as a delimiter.
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = WScript.CreateObject("WScript.Network")	'Network Object
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
	Set IPConfigSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
	'On error commands are a fix for script errors when a new pc runs the script for the first time.
	'On Error Resume next
	'On Error GoTo 0
	For Each IPConfig in IPConfigSet
		If Not IsNull(IPConfig.IPAddress) Then 
			For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
				ipadds = IPConfig.IPAddress(i)
				WScript.Echo "ipadds = " & ipadds
				If Left(ipadds,2) = "10" Then
					CurrentIP = IPConfig.IPAddress(i)
					MACAddress = IPConfig.Macaddress(i)
				End If
		End If

Open in new window

amendalaAuthor Commented:
Thanks for the reply Jared by unfortunately, it needs to be done in a DOS batch context given the limitations of the environment that this function must work in.  That said, I'll certainly be keeping that snippet for future reference.  :)
Jared LukerCommented:
Do all these computers only have one NIC when you do an ipconfig?
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.