Otro más de comandos... (y último :P)
Reto iniciado por Batchiano
Reto Nº 12
Nombre: Get IP from DNS
Dificultad: 4/10
Objetivo: Crear un comando que, al enviar un DNS, devuelva la IP adjunta a dicho DNS
Indicaciones: Es obligatorio utilizar FOR.
Pista: PING.
Ejemplo:
(http://img405.imageshack.us/img405/6866/31092320.png)
Solución: MP
Aqui el mio :P
@echo off
If "%1" EQU "" Echo GetIP [URL]
ping "%1" > archi.tmp
find /N "%1" archi.tmp > archiv.tmp
For /F "tokens=5 skip=1" %%i in (archiv.tmp) do (echo %%i)
del /Q archi.tmp archiv.tmp
Exit /B
EDIT: Modificado con la observaciones de elektro h@cker
Cita de: -- KiLiaN -- en 7 Mayo 2012, 10:53 AM
Aqui el mio :P
Funciona :), Pero déjalo así para que no mande tantas peticiones y no tarde ni medio segundo en mostrar la ip...
ping -n 1 "%1" > archi.tmp
PD: Usa "
Exit /B" a la hora de "Hacer comandos" para no terminar la instancia de la CMD :P
Salu2
CitarPD: Usa "Exit /B" a la hora de "Hacer comandos" para no terminar la instancia de la CMD
Buen apunte, en todos los aspectos, maestro xD
Cita de: -- KiLiaN -- en 7 Mayo 2012, 10:53 AM
Aqui el mio :P
@echo off
If "%1" EQU "" Echo GetIP [URL]
ping "%1" > archi.tmp
find /N "%1" archi.tmp > archiv.tmp
For /F "tokens=5 skip=1" %%i in (archiv.tmp) do (echo %%i)
del /Q archi.tmp archiv.tmp
Funciona aunque lo mismo que en el anterior reto: estructura if-else
if Expresión-booleana (
acciones (TRUE)
) else (
acciones (FALSE)
)
PD: se puede acortar el código y no hace falta crear achivos temporales.
¡Buen trabajo!
La única solución no es la que tu hayas hecho si funciona el codigo debería darse por bueno digo yo, ya que hay varias formas de hacer lo mismo..obviamente se puede hacer mas corto y mas bonito y al IF no le veo nada malo..
Pues mira, el IF está mal porque aunque el usuario no introduzca ninguna url, el comando trata de obtener la ip de una url que no ha sido recibida. Por lo tanto estás haciendo ping "" > archi.tmp porque %1 es una cadena vacía... entonces:
if "%1" EQU "" (
Echo GetIP [URL]
) else (
ping "%1" > archi.tmp
find /N "%1" archi.tmp > archiv.tmp
For /F "tokens=5 skip=1" %%i in (archiv.tmp) do (echo %%i)
del /Q archi.tmp archiv.tmp
)
No quiero que se me interprete mal. Yo no estoy riñendo a nadie xD. Cuando yo empecé en Batch hacía igual que tú... Buen trabajo como dije antes.
@echo off
If "%1" EQU "" Echo GetIP [URL] & goto :EOF
ping "%1" > archi.tmp
find /N "%1" archi.tmp > archiv.tmp
For /F "tokens=5 skip=1" %%i in (archiv.tmp) do (echo %%i)
del /Q archi.tmp archiv.tmp
Asi no hace falta el else..
PD: no te tomes a mal tampoco mis palabras, yo no me tomé a mal las tuyas xD
Cita de: -- KiLiaN -- en 7 Mayo 2012, 11:13 AM
obviamente se puede hacer mas corto y mas bonito y al IF no le veo nada malo..
@Echo OFF
ping -n 1 %* >NUL || (Echo GetIP [URL] | MORE & Echo Compruebe el nombre y vuelva a intentarlo... & Exit /B 1)
For /F "tokens=2 delims=[]" %%# in ('ping -n 1 %*') do (Echo %%# & Exit /B 0)
Salu2!
Cita de: EleKtro H@cker en 7 Mayo 2012, 12:13 PM
@Echo OFF
ping -n 1 %* >NUL || (Echo GetIP [URL] | MORE & Echo Compruebe el nombre y vuelva a intentarlo... & Exit /B 1)
For /F "tokens=2 delims=[]" %%# in ('ping -n 1 %*') do (Echo %%# & Exit /B 0)
Salu2!
Genial. Y genial lo de la condición lógica :) Yo al for le había añadido
skip=1 aunque no hace falta.
HOLA!!!
ALGUIEN paseme el Ping.exe, Tracert.exe, Sort.exe de algun win/xp/sp3/32bits
GRACIAS POR LEER!!!
HOLA!!!
(sorry por el 2ble post, es para hacer bumping)
Si no me quieren pasar el ping.exe y los demas, pasenme la salida de
ping.exe www.google.com
GRACIAS POR LEER!!!
Cita de: 79137913 en 10 Mayo 2012, 16:58 PM
HOLA!!!
(sorry por el 2ble post, es para hacer bumping)
Si no me quieren pasar el ping.exe y los demas, pasenme la salida de
ping.exe www.google.com
GRACIAS POR LEER!!!
Citar
C:\>ping www.google.com
Haciendo ping a www.l.google.com [173.194.34.17] con 32 bytes de datos:
Respuesta desde 173.194.34.17: bytes=32 tiempo=377ms TTL=51
Respuesta desde 173.194.34.17: bytes=32 tiempo=523ms TTL=51
Respuesta desde 173.194.34.17: bytes=32 tiempo=541ms TTL=51
Respuesta desde 173.194.34.17: bytes=32 tiempo=291ms TTL=51
Estadísticas de ping para 173.194.34.17:
Paquetes: enviados = 4, recibidos = 4, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
Mínimo = 291ms, Máximo = 541ms, Media = 433ms
HOLA!!!
@echo off
SETlocal enabledelayedexpansion
ping "%1" > a.txt
CLS
for /f "tokens=*" %%x in (a.txt) do (set N=!N!%%x)
del /s /q a.txt
CLS
SET NUM=0
:LOOP
call set CHAR=%%N:~%NUM%,1%%%
set /a NUM+=1
IF "%CHAR%"=="[" (SET /A IPSTART=%NUM%
GOTO LOOPB)
GOTO LOOP
:LOOPB
call set CHAR=%%N:~%NUM%,1%%%
set /a NUM+=1
IF "%CHAR%"=="]" (SET /A IPEND=%NUM%
GOTO IPTERMINADO)
GOTO LOOPB
:IPTERMINADO
SET /A AUX=%IPEND%-%IPSTART%-1
CALL SET IP=%%N:~%IPSTART%,%AUX%%%%
ECHO [IP]: %IP%
PAUSE
GRACIAS POR LEER!!!
Solución:
@Echo Off
if "%~1" EQU "" goto :eof
for /f "tokens=2 delims=[]" %%_ in (
'"ping %~1 -n 1"'
) do (echo: %%_)
exit /b
Pasa que, ahora que me fijo, viene a ser lo mismo que los otros códigos... Es que no se puede hacer distinto y mejor, tampoco :xD
.
Es lo más sencillo que se me ocurrió sin ser tan sinuoso con el FOR.
@echo off
ping -n 1 %1 |find "%1">data.tmp
for /f "tokens=2 delims=[]" %%a in (data.tmp) do (
echo %%a
del data.tmp
)