Título: [BATCH] Como buscar y eliminar una linea de texto (Solucionado) Publicado por: RS_cool 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 Título: Re: [BATCH] Como buscar y eliminar una linea de texto Publicado por: Eleкtro 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
Salu2. Título: Re: [BATCH] Como buscar y eliminar una linea de texto Publicado por: RS_cool 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"? Título: Re: [BATCH] Como buscar y eliminar una linea de texto Publicado por: Eleкtro 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 etc... Tambien puedes usar FINDSTR que te ayudaría a simplificar un poco el proceso permitiendo buscar varias cadenas al mismo tiempo: Código 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 Título: Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado) Publicado por: RS_cool 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. Título: Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado) Publicado por: RS_cool 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! Título: Re: [BATCH] Como buscar y eliminar una linea de texto (Solucionado) Publicado por: Eleкtro 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
saludos |