Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
ank_stal
- Posts: 1
- Joined: 04 Nov 2020 23:54
#1
Post
by ank_stal » 04 Nov 2020 23:59
I have been working on the script but it checks the IP's corresponding to the primary dns only.
Now I'm trying to make changes in this one by checking the IP to specified dns servers. But I also don't want to flood the output with multiple entries of IP corresponding to all dns servers.
Code: Select all
@echo OFF
setlocal enabledelayedexpansion enableextensions
del results.txt 2>nul
set me=%~n0
set parent=%~dp0
set "outputfile=results.txt"
set "inputfile=ip.txt"
set "dnsfile=dns.txt"
FOR /F %%i in (%dnsfile%) do (
FOR /F %%j in (%inputfile%) do (
FOR /F "delims=: tokens=2" %%k in ('nslookup %%j %%i ^| find /i "Name:"') do @echo %%j,%%k >> %outputfile%
)
)
This gives the output corresponding to all the dns servers but I want only one entry in the output for all the IP's. If the script gets the hostname of the IP corresponding to one dns server it should print it in the output and go to the next IP instead of checking the same ip corresponding to the different dns server. But I'm stuck at this point not able to skip the inside loop and get to the next IP.
Eg:
ip.txt:
10.x.x.5
10.x.x.10
dns.txt:
172.x.x.6
172.x.x.2
Output I get with the script:
Results.txt
10.x.x.5,server1
10.x.x.10,server2
10.x.x.5,server1
10.x.x.10,server2
Output I want:
Results.txt
10.x.x.5,server1
10.x.x.10,server2
Last edited by
aGerman on 05 Nov 2020 04:55, edited 1 time in total.
Reason: Please use code formatting.
-
penpen
- Expert
- Posts: 2009
- Joined: 23 Jun 2013 06:15
- Location: Germany
#2
Post
by penpen » 07 Nov 2020 04:06
The following idea might help you (untested):
Code: Select all
FOR /F %%j in (%inputfile%) do "set map[%%~j]="
FOR /F %%i in (%dnsfile%) do (
FOR /F %%j in (%inputfile%) do (
FOR /F "delims=: tokens=2" %%k in ('nslookup %%j %%i ^| find /i "Name:"') do (
if not not defined map[%%~j] (
"set map[%%~j]=%%~k"
>> %outputfile% echo %%j,%%k
)
)
)
)
penpen