elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Como buscar y eliminar una linea de texto (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Como buscar y eliminar una linea de texto (Solucionado)  (Leído 15,276 veces)
RS_cool

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[BATCH] Como buscar y eliminar una linea de texto (Solucionado)
« en: 17 Abril 2012, 14:30 pm »

Hola compañeros.
Llevo registrado desde 2004 pero es la primera vez que escribo.

Tengo un problema con un script batch, estoy haciendo un script en el que se añadan unas lineas al archivo host de windows con ciertas direcciones URL para que al interntar conectarse lo haga con localhost (127.0.0.1) en vez de con la dirección real, hasta ahí todo bien, el problema es que no sé como puedo hacer luego porque quiero otra opción para eliminar esas lineas si existen.

En realidad el código es más largo pero no interesa nada más que esto

Código:
@echo off
call :Title

:menu
echo.
echo Selecciona una opción de entre las siguientes
echo Teclea el número respectivo y ENTER:
echo.
echo [1] » Según método 1 (bloquear www.test.net)
echo [2] » Según método 2 (bloquear www.prueba.com)
echo [3] » Eliminar los bloqueos
echo [4] » Cancelar
echo.

set /p "respuesta="
if "%respuesta%"=="1" goto :mode1
if "%respuesta%"=="2" goto :mode2
if "%respuesta%"=="3" goto :delete
if "%respuesta%"=="4" goto :cancel

Call :Title
echo.
echo      - Error - No has introducido ninguna opción válida
echo.
goto :menu

:: ================== :. Instalación según modo 1 .: ====================

:mode1
@echo on
FIND /C /I "www.test.net" %WINDIR%\system32\drivers\etc\hosts
IF %ERRORLEVEL% NEQ 0 ECHO %NEWLINE%^127.0.0.1                   www.test.net>>%WINDIR%\system32\drivers\etc\hosts
@echo off

Call :Title
echo.
echo Bloqueando www.test.net .
ping localhost -n 2 >nul
Call :Title
echo.
echo Bloqueando www.test.net ..
ping localhost -n 2 >nul
Call :Title
echo.
echo Bloqueando www.test.net ...
ping localhost -n 2 >nul
goto :end

:: ================== :. Instalación según modo 2 .: ====================

:mode2
@echo on
FIND /C /I "www.prueba.com" %WINDIR%\system32\drivers\etc\hosts
IF %ERRORLEVEL% NEQ 0 ECHO %NEWLINE%^127.0.0.1                   www.prueba.com>>%WINDIR%\system32\drivers\etc\hosts
@echo off

Call :Title
echo.
echo Bloqueando www.prueba.com .
ping localhost -n 2 >nul
Call :Title
echo.
echo Bloqueando www.prueba.com ..
ping localhost -n 2 >nul
Call :Title
echo.
echo Bloqueando www.prueba.com ...
ping localhost -n 2 >nul
goto :end

:: =================== :. Borrado de datos .: =======================

:delete

:: ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡AQUI NO SÉ QUE HACER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Call :Title
echo.
echo Eliminando bloqueo .
ping localhost -n 2 >nul
Call :Title
echo.
echo Eliminando bloqueo ..
ping localhost -n 2 >nul
Call :Title
echo.
echo Eliminando bloqueo ...
ping localhost -n 2 >nul
goto :end

:: =================== :. Finalización por cancelación .: ========================

:cancel
Call :Title
echo.
echo × -INSTALACIÓN CANCELADA POR EL USUARIO- ×
echo.
goto end

:: ======================== :. Despedida y cierre .: =============================

:end
call :Bye
echo.
echo Presione cualquier tecla para salir
pause >nul
cls
echo Cerrando.
ping localhost -n 2 >nul
cls
echo Cerrando..
ping localhost -n 2 >nul
cls
echo Cerrando...
ping localhost -n 2 >nul
Exit

:: =========== :. Gráficos | Después de exit para solo mostrarse al ser llamados .: ======================

:Title
cls
echo ╔═════════════════════════════════════════════════════════════════════════════╗
echo ║         Bloqueo de Direcciones Web   www.test.com  y  www.prueba.com        ║
echo ╚═══════════════════════════════════════════════════// by ZeroCool@ßreaker  //╝
echo.
goto :null

:Bye
echo.
echo.
echo.
echo.
echo.
echo ▀█▓▒░  Gracias por utilizar este SCRIPT  ░▒▓█▀
echo ▄█▓▒▒▒░░░  Ş 2012 ZeroCool@ßreaker  ░░░░▒▒▒▓█▄
echo.
echo.
echo.
goto :null

:: ========= :. La etiqueta null lleva al final evitando que se muestren todos los gráficos seguidos .: ==========

:null



« Última modificación: 17 Abril 2012, 15:40 pm por RS_cool » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto
« Respuesta #1 en: 17 Abril 2012, 15:03 pm »

Hola.

Editar una linea es algo totalmente imposible nativamente en Batch (Bueno, en Windows XP dispones del comando Edit, Pero...hablamos de WinXP).
Tienes que reescribir el archivo. Puedes usar el comando find, O llamar a utilidades externas como SED, GREP, FART, etc...

Te hago el ejemplo filtrando la URL con FIND.

Código
  1. @echo off
  2.  
  3. :menu
  4. echo respuesta
  5. set /p respuesta=^>^>
  6. if "%respuesta%"=="3" goto :delete
  7.  
  8. :: =================== :. Borrado de datos .: =======================
  9.  
  10. :delete
  11. Cls
  12. Echo: URL que quieres desbloquear              | MORE
  13. Echo: (No es necesario escribir www. ni .com ) | MORE
  14. Set /p URL=^>^>
  15.  
  16. Choice /M " Estas seguro? "
  17. If %ERRORLEVEL% EQU 1 (
  18. echo Eliminando bloqueo...
  19. Type "%WINDIR%\System32\drivers\etc\hosts" | Find /V /I "%URL%" > "%WINDIR%\System32\drivers\etc\hosts.tmp"
  20. Del /Q "%WINDIR%\System32\drivers\etc\hosts"
  21. Rename "%WINDIR%\System32\drivers\etc\hosts.tmp" "hosts"
  22. ping localhost -n 2 >nul
  23. Goto :Menu
  24. ) ELSE (
  25. Goto :Delete
  26. )

Salu2.


En línea



RS_cool

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto
« Respuesta #2 en: 17 Abril 2012, 15:25 pm »

Osea que lo que me propones es reescribir el archivo eliminando el contenido, y sustituirlo.

Yo estaba dándole vueltas a hacerlo de la misma manera que las añado que solo introduzco una linea si ésta no existe. Y por más que buscaba sobre ello no encontraba nada, quería de la misma manera si la linea existía borrarla, y encontrarla si, pero borrarla era imposible, ni siquiera podía saber en que línea estaba, pero si me dices ahora que es imposible pues ya lo entiendo.
Que les hubiese costado hacer esa opción... Prehistóricas limitaciones...

Bueno, muchas gracias porque cumple su función aunque sea teniendo que hacerlo tan enrevesado, y tener que escribir 100 lineas para borrar una... Como tampoco creo que tarde en la clase de archivo que estamos hablando, me quedo con ella.

En realidad no pediré que pregunte la URL que desea desbloquear ya que el Batch real llevará muchas URL y el usuario no se las va a saber, únicamente se deben eliminar las mismas que introduzco en las dos opciones. Ahora entonces no se me ocurre otra cosa que si tengo que eliminar 50 URL tengo que reescribir el archivo 50 veces, usando 50 veces find, al igual que para escribirlas usaba un find para cada una...

Saludos y gracias de nuevo

PD: Una dudilla por que pones "| More" después de los "Echo"?
« Última modificación: 17 Abril 2012, 15:40 pm por RS_cool » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto
« Respuesta #3 en: 17 Abril 2012, 16:10 pm »

Ahora entonces no se me ocurre otra cosa que si tengo que eliminar 50 URL tengo que reescribir el archivo 50 veces, usando 50 veces find, al igual que para escribirlas usaba un find para cada una...

No precisamente, Puedes reescribir el archivo una vez, usando find 50 veces...

Código
  1. Type "hosts" | find /V /I "%URL1%" | find /V /I "%URL2%" | find /V /I "%URL3%" | find /V /I "%URL4%"
etc...

Tambien puedes usar FINDSTR que te ayudaría a simplificar un poco el proceso permitiendo buscar varias cadenas al mismo tiempo:
Código
  1. Type "hosts" | findstr /V /I "%URL1% %URL2% %URL3% %URL4%"
PD: Cuidado con los espacios y los puntos.
      FINDSTR /?

PD: Una dudilla por que pones "| More" después de los "Echo"?
Para añadir una linea de Echo en blanco.
(Para ahorrar lineas de escritura en el code)

Salu2
En línea



RS_cool

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado)
« Respuesta #4 en: 17 Abril 2012, 17:23 pm »

Pues lo del FIND con múltiples busquedas estuve intentando cuando andaba buscando la manera de encontrarlos y borrarlos y me daba error, pero quizás era por el resto de esa parte y yo pensé que era el FIND, intentaré como me has comentado primero, y sino ya le echo un vistazo a FINDSTR que no se como va.

Gracias de nuevo y muy útil lo del "| More" para no llenar de "echo."que ensucian mucho.

En un rato me has solucionado el BATCH que llevaba dándole vueltas bastantes días

Un saludo.
En línea

RS_cool

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado)
« Respuesta #5 en: 17 Abril 2012, 21:58 pm »

Finalmente
Si lo hago con FIND

Código:
Type "%WINDIR%\System32\drivers\etc\hosts" | Find /V /I "URL1.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp" | Find /V /I "URL2.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp" | Find /V /I "URL3.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp" | Find /V /I "sub.URL.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp"

dá un error y se cierra.


Y si lo hago con FINDSTR

Código:
Type "%WINDIR%\System32\drivers\etc\hosts" | Findstr /V /I "URL1.com URL2.com URL3.com sub.URL.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp"

elimina perfectamente las lineas que contienen esas URL

Asi que finalmente conseguido con FINDSTR

Muchas gracias por ayudarme,

Un saludo!
« Última modificación: 17 Abril 2012, 22:33 pm por RS_cool » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado)
« Respuesta #6 en: 17 Abril 2012, 22:49 pm »

Ya lo has solucionado, Pero te explico que no te funciona la primera linea porque lo estabas haciendo mal.

Así sí:
Código
  1. Type "%WINDIR%\System32\drivers\etc\hosts" | Find /V /I "URL1.com" | Find /V /I "URL2.com" | Find /V /I "URL3.com" | Find /V /I "sub.URL.com" > "%WINDIR%\System32\drivers\etc\hosts.tmp"

saludos
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines