WINDOWS PROMPT Получаване на IP на уеб страници от файл

Трябва да получа IP на уеб страници, които ще доставя от txt файл: например txt файлът изглежда така:

google.com
yahoo.com
toyota.com
bmw.com
etc...

Ще трябва да взема нещо подобно

81.177.116.172
11.127.114.122
etc..
or 
81.177.116.172 - google.com
11.127.114.122 - yahoo.com

Знам, че мога да използвам

ping websiteurl.com > ping.txt

но искам да проверя около 2000 страници. Моля за съвет как да го направя по най-бързия начин и как да доставя ред от txt файл като параметър на ping. Благодаря


person jawjaw    schedule 15.06.2015    source източник


Отговори (2)


Знам, че това е отговор на PowerShell на пакетен въпрос, но откривам, че много хора питат как да правят нещата в пакет, когато наистина искат просто команден ред. Ако искате да научите как да правите неща като тези, научете PowerShell вместо batch, тъй като е много по-лесно за научаване от сложната команда batch FOR (моите извинения на онези от вас, които наистина я разбират).

get-content c:\temp\test.txt | foreach-object{ping ([System.Net.Dns]::GetHostAddresses("$_")[0].IPAddressToString)}
person Tony Hinkle    schedule 15.06.2015
comment
... и не сте сигурни какво точно искате - това търси името и пингва (първо върнатия) IP адрес. Ако искате първо да запишете IP адресите в текстов файл и след това да ги прочетете и да ги пингвате, това не е голяма работа, но не виждам смисъл да правите това, тъй като IP може да се промени във всеки един момент и тогава вие ще трябва да разреши имената и да запише отново новите IP адреси във файл. - person Tony Hinkle; 15.06.2015

Следващият актуализиран и коментиран кодов фрагмент е по-бърз от кода в моя оригинален отговор:

@ECHO OFF
SETLOCAL enableextensions disabledelayedexpansion

set "_format=%~1"                   use for output ''beautifying''
if defined _format (
  echo        hostname OP IPv4_address    explanation
  echo        -------- -- ------------    -----------
)
set "_file=files\30852528.txt"      change to fit your circumstances

for /F "usebackq delims=" %%i in ("%_file%") do (
  set "_host=%%i"                   remember input line 

  for /F "tokens=1 delims==" %%G in ('set ___ping 2^>NUL') do set "%%G="

  set /A "_line=0" 
  for /F "delims=" %%G in ('ping -a -4 -n 1 %%i') do (
    set /A "_line+=1"
    call set "___ping%%_line%%=%%G" remember ping output to an array-like variable
  )
  REM   rem debug output in next two lines
  REM   echo(
  REM   for /F "tokens=1* delims==" %%G in ('set ___ping 2^>NUL') do echo(%%H
  call :pings
) 
ENDLOCAL
goto :eof

:pings
  set "_operator=??"
  set "_hostIPno=%_host%"
  set "_hostName=%_host%"
  set "_auxiliar="
  set "_explains=Unknown reason"    default values set

  set "_string=Ping request could not find host"
  for /F "delims=" %%G in ('set ___ping^|findstr /i /C:"%_string%"') do (
      set "_operator=##"
      set "_explains=%_string%"     ping request could not find host
      goto :pingsDone
  )

  set "_string==Pinging"
  for /F "tokens=1-4 delims==[] " %%G in ('set ___ping^|findstr /i /C:"%_string%"') do (
      echo("%%J"|findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*">NUL
      if errorlevel 1 (
          set "_auxiliar=%%H %%I"
      ) else (
          set "_auxiliar=%%H %%I [%%J]"
          set "_hostIPno=%%J"
          set "_hostName=%%I"       address to hostname resolved
      )
  )

  set "_string=Destination host unreachable"
  for /F "tokens=1* delims==" %%G in ('set ___ping^|findstr /i /C:"%_string%"') do (
      set "_explains=%%H"
      set "_operator=?="            destination host unreachable
  )

  set "_string=Request timed out"
  for /F "tokens=1* delims==" %%G in ('set ___ping^|findstr /i /C:"%_string%"') do (
      set "_explains=%_auxiliar%: %%H"
      set "_operator==?"            request timed out
  )

  set "_string=TTL="
  for /F "tokens=1* delims==" %%G in ('set ___ping^|findstr /i "%_string%"') do (
      set "_explains=%%H"
      set "_operator==="            ping request successful
  )
:pingsDone
  rem basic formatting: output to columns only for demonstration at StackOverflow
  if defined _format (
      set "_hostName=               %_hostName%"
      set "_hostIPno=%_hostIPno%               "
      set "_explains= %_explains%"
  ) else set "_explains="
  if defined _format (
      set "_hostName=%_hostName:~-15%"
      set "_hostIPno=%_hostIPno:~0,15%"
  )

  rem output with delayed expansion enabled:
  SETLOCAL enabledelayedexpansion
    echo(!_hostName! !_operator! !_hostIPno!!_explains!
  ENDLOCAL
goto :eof

Данни:

d:\bat> type "files\30852528.txt"|findstr /V "^;"
foo.bar
google.com
77.75.79.53
192.168.1.1
192.168.1.12
bmw.com
160.46.244.131

Изход (изпълнете от отворен cmd прозорец):

d:\bat> so\30852528.bat
foo.bar ## foo.bar
google.com == 216.58.209.206
www.seznam.cz == 77.75.79.53
192.168.1.1 == 192.168.1.1
192.168.1.12 ?= 192.168.1.12
bmw.com =? 160.46.244.131
origin.bmw.com =? 160.46.244.131

Разкрасен резултат:

d:\bat> so\30852528.bat 1
       hostname OP IPv4_address    explanation
       -------- -- ------------    -----------
        foo.bar ## foo.bar         Ping request could not find host
     google.com == 216.58.209.206  Reply from 216.58.209.206: bytes=32 time=24ms TTL=56
  www.seznam.cz == 77.75.79.53     Reply from 77.75.79.53: bytes=32 time=10ms TTL=248
    192.168.1.1 == 192.168.1.1     Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
   192.168.1.12 ?= 192.168.1.12    Reply from 192.168.1.100: Destination host unreachable.
        bmw.com =? 160.46.244.131  Pinging bmw.com [160.46.244.131]: Request timed out.
 origin.bmw.com =? 160.46.244.131  Pinging origin.bmw.com [160.46.244.131]: Request timed out.
person JosefZ    schedule 15.06.2015