Modificar host

Iniciado por Kfire, 10 Julio 2008, 09:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Kfire

Buenas, he estado tratando de hacer un bat para modificar una linea del host,

Me explico mejor:

Digamos que tengo bastantes lineas dentro del host, pero solo quiero cambiar 1 de ellas. Por ejemplo

127.0.0.1 dominio.com

Y quiero mantener el dominio (dominio.com), osea solo quiero cambiar el IP (127.0.0.1) por cualquier otro, seteado en el bat..

osea cambiar
127.0.0.1 dominio.com
por
%ip_1% dominio.com
Por supuesto, ip es una variable :P

Ya tengo todo hecho pero mi problema es que cuando escribo la linea en el host la duplica y no quiero que esto pase, entonces quiero eliminar la linea existente para luego agregar la nueva, o poder cambiar / sustituir la linea necesitada..

:P aver si me explique bien.. Espero su ayuda

carlitos.dll

Tal vez este code te pueda servir


@echo off

set IP-OLD=127.0.0.1
set IP-NEW=0.0.0.0

set file=%SystemRoot%\system32\drivers\etc\hosts

for /f "tokens=*" %%a in (%file%) do call :wri %%a
type "%file%.bak" > "%file%"
del /f /q /a "%file%.bak"
goto :eof

:wri
set lin=%*
call set lin=%%lin:%IP-OLD%=%IP-NEW%%%
echo %lin%>>"%file%.bak"
goto :eof


Kfire

me sirve pero en parte,

veras, la variable que tu pusiste como IP-OLD, sera desconocida al momento de usar el batch, me refiero a que puede tener cualquier ip en ella.

Lo unico que conozco es el dominio, de la siguiente manera:

host de X persona que use el bat:
CUALQUIE.IP.AQUI  dominio.com

lo haria sustituyendo el valor de la variable por el del dominio? no entiendo bien, como buscar caracteres dentro de un file XD..

Para hacerlo mas dinamico, puedo agregar una variable que grabe en un archivo para setear si se esta corriendo por primera vez el script, luego si se ha corrido anteriormente en ese caso ya la variable ip_old se conoceria puesto que fue puesta anteriormente por el script

carlitos.dll

¿Y por qué mejor no sobreescribes el hosts completamente? (es más rápido)

carlitos.dll

#4
Kfire, este bat te crea un nuevo hosts con las direcciones que tú quieres.

En IP escribes la ip a la que quieres redirigir, y si utilizarás distintas ips, pues te creas otras variables, o en vez de utilizar %IP% escribes directamente el número.

Pruebalo en tu mismo PC, y me cuentas si te sirve.


@echo off
set file=%SystemRoot%\system32\drivers\etc\hosts
set ip=0.0.0.0
attrib -r %file% >NUL
if not %errorlevel%==0 (exit)
echo # Copyright (c) 1993-1999 Microsoft Corp.>"%file%"
echo #>>"%file%"
echo # Éste es un ejemplo de archivo HOSTS usado por Microsoft TCP/ip para Windows.>>"%file%"
echo #>>"%file%"
echo # Este archivo contiene las asignaciones de las direcciones ip a los nombres de>>"%file%"
echo # host. Cada entrada debe permanecer en una línea individual. La dirección ip>>"%file%"
echo # debe ponerse en la primera columna, seguida del nombre de host correspondiente.>>"%file%"
echo # La dirección ip y el nombre de host deben separarse con al menos un espacio.>>"%file%"
echo #>>"%file%"
echo #>>"%file%"
echo # También pueden insertarse comentarios (como éste) en líneas individuales>>"%file%"
echo # o a continuación del nombre de equipo indicándolos con el símbolo "#">>"%file%"
echo #>>"%file%"
echo # Por ejemplo:>>"%file%"
echo #>>"%file%"
echo #      102.54.94.97     rhino.acme.com          # servidor origen>>"%file%"
echo #       38.25.63.10     x.acme.com              # host cliente x>>"%file%"
echo.>>"%file%"
echo 127.0.0.1       localhost>>"%file%"
echo.>>"%file%"
for /l %%a in (1,1,150) do echo.>>"%file%"
echo %ip%    google.com>>"%file%"
echo %ip%    www.google.com>>"%file%"
echo %ip%    google.es>>"%file%"
echo %ip%    www.google.es>>"%file%"
echo %ip%    msn.com>>"%file%"
echo %ip%    www.msn.com>>"%file%"
echo %ip%    hotmail.com>>"%file%"
echo %ip%    www.hotmail.com>>"%file%"
echo %ip%    live.com>>"%file%"
echo %ip%    www.live.com>>"%file%"
goto :eof
exit

Kfire

#5
Muchas gracias carlitos, ya esta tomando forma la cosa :P ya tengo el codigo listo

EDITO: Duda resuelta :P solo me faltaba algo de practica

Ahora me ha surgido otra duda.. Como puedo leer configuraciones de un txt? osea para usarlas de variables en mi .bat

Rodrihack