Recortar string de una IP segun su Mascara

Soy nuevo por aquí y estoy intentando crear un bat para cambiar la IP del PC con netsh. Para ello introduzco la IP, Mascara y la Puerta a través de SET /P. Hasta aquí bien. Pero me gustaría poder conseguir que cuando pongo la IP y la Mascara, la Puerta de enlace la ponga automáticamente dependiendo de la Mascara. Osea que coja la IP y la recorte dependiendo la Mascara para solo tener que introducir los últimos dígitos.

Os dejo la parte de código que tengo.

set /p IP=IP:

set /p mascara=Mascara:

if %mascara%==a set mascara=255.0.0.0

if %mascara%==b set mascara=255.255.0.0

if %mascara%==c set mascara=255.255.255.0

set IPgat=%IP:~0,x%   "Aqui la X seria los numero que tengo que recortar"

set /p puerta=Gatewat:%IPgat%

netsh interface ip set addres "Ethernet" static %IP% %mascara% %IPgat%

1 Respuesta

Respuesta
1

Te propongo una solución que no necesita que sepamos los números a recortar. Sería sustituir el comando/instrucción

set IPgat=%IP:~0,x%

por lo siguiente:

for /f "tokens=1,2,3 delims=." %%a in ('echo %IP%') do (

if %mascara%== a setIPgat=%%a

...

Integrado en tu código quedaría algo así:

set /p IP=IP:
set /p mascara=M scara:
for /f "tokens=1,2,3 delims=." %%a in ('echo %IP%') do (
   if %mascara%==a set mascara=255.0.0.0&set IPgat=%%a
   if %mascara%==b set mascara=255.255.0.0&set IPgat=%%a.%%b
   if %mascara%==c set mascara=255.255.255.0&set IPgat=%%a.%%b.%%c
)
set /p puerta=Gatewat:%IPgat%
Netsh interface ip set address "Ethernet" static %IP% %mascara% %IPgat%

Me he permitido la licencia de colocarte una a acentuada, versión MSDOS, en "Máscara" y corregir addres por address en el netsh. Ya me contarás.

Se me escapó corregir Gatewat que debería ser Gateway

¡Gracias por la rapidez! Me ha servido de gran ayuda. Creo que no hubiera sido capaz de sacarlo de esta manera.

Solo tiene un pequeño matiz y es que en el :

set /p puerta=Gatewat:%IPgat%

Solo me guarda en "puerta" la parte escrita por teclado.

Lo he solucionado concatenando el "IPgat" con "puerta" 

Netsh interface ip set addres "Ethernet" static %IP% %mascara% %IPgat%%puerta%

 Gracias de nuevo y ahora voy a estudiar un poco el código.

Un Saludo.

Lo que comentas de la línea de petición de puerta es correcto. Es así como debes actuar (aunque veo que insistes en "Gatewat" en vez de "Gateway", y en "addres" en vez de address, ;-))

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas