Título: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: gregory90 en 14 Abril 2016, 11:25 am Buenas,
Esto no es tanto de scripting pero no sabía muy bien donde encajarlo. Estoy intentando buscar a través del comando de entrada las determinadas cadenas de palabras, e probado muchas combinaciones diferentes y nada... Para que se entienda estes serían unos ejemplos: Código: <comando de entrada> | find "<Conjunto de palabras a buscar literalmente en la salida del comando>" | find "<OTRO conjunto de palabras a buscar literalmente en la salida del mismo comando>" Código: <comando de entrada> | find "<Conjunto de palabras a buscar literalmente en la salida del comando>" && "<OTRO conjunto de palabras a buscar literalmente en la salida del mismo comando>" Pruebo lo mismo con findstr. La cuestión de todo esto, es intentar concatenar diversos términos literales dentro del comando find o findstr (u otro si lo hubiese). Gracias un saludo! Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: gregory90 en 15 Abril 2016, 09:10 am seguí probando y nada...
no entiendo que más necesita el interprete para ejecutar una sintaxis de este tipo. Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: Zomkar en 15 Abril 2016, 19:59 pm Lo que sucede es que findstr te devuelve toda la linea, asi que lo que estas pasando entre pipes es cada vez lo mismo.
Por ejemplo, asumiendo este string original: Código: abcdacb ejecutamos Código: FINDSTR /C:"acb" Código: abcdacb Asi que si luego tu querias extraer de ahi "cb", no puedes, ya que siempre te devolverá, mientras la búsqueda encuentre un resultado Código: abcdacb Para lo que quieres hacer puedes usar FOR /F con tokens y delims(si los datos tienen una estructura conocida), o con substring tambien podrias (te daría algo más de juego). Lo bueno de substring es que puedes obtener nuevas Strings con los datos que tu quieres solo indicando las cadenas a conservar/eliminar. Para cosas más complicadas te recomiendo que busques un codigo en VBS o powershell (o cualquier otro), no es que no se pueda hacer en batch pero se puede complicar mucho el codigo y creo que no vale la pena. PD: ahora me fijo que usabas find, pero el resultado para lo que explicaba es el mismo, no se devuelve la cadena, sino toda la linea. PD2: otra cosa que igual te sirve también es que si findstr encuentra un resultado errorlevel vale 0, entonces puedes usar algo como: Código: set var=cadena1 Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: gregory90 en 18 Abril 2016, 01:03 am Gracias por la respuesta @Zomkar, pero el tema no es el resultado que me devuelve, si eso lo hace bien ya que quiero que me devuelva la línea entera de la cadena.
La cuestión de esto, es que en una sola línea quería hacer todas las búsquedas de todas las líneas que contengan determinada palábra, para eso se me ocurrió contatenar varios find o findstr (me daría lo mismo para este caso) con un pipe (|) de modo que en cada find ir incluyendo la palabra que estará en la línea a mostrar. La cuestión es cómo enlazar varios comandos find o findstr en una sola líniea o sentencia para encontrar palabras de diferentes líneas. Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: Zomkar en 18 Abril 2016, 02:34 am De nada! A mi me funciona así:
Código: C:\Users\>echo aaaa | findstr /C:"a" | findstr /C:"a" Creo que tu quieres buscar las lineas que contengan "abc" y además que contengan "xyz", es asi? Y que si lo encuentran las muestre. Para eso sirve con este ejemplo. Si es otra cosa a ver si puedes explicar mejor. Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: gregory90 en 18 Abril 2016, 12:20 pm En el segundo ejemplo que pusiste, se ve como buscando "a" y "b" no devuleve nada pese a que "a"
si que existe y aunque "b" no. Código: C:\Users\>echo aaaa | findstr /C:"a" | findstr /C:"b" Yo quiero hacer algo similar a eso, pero que si que me lo muestre. Imaginemos que es lo siguiente: Hago un dir en mi directorio y me muestra los siguiente: Código: C:\Users\gregor>dir Ahora quiero solo coger tres líneas que contengan determinadas palabras, por ejemplo, desktop, Favorites y Music. Al introducir el comando y contatenar el findstr con un pipe (|), este como restultado no me muestra nada. Código: C:\Users\gregor>dir | findstr /C:"Desktop" | findstr /C:"Favorites" | findstr /C:"Music" Lo que quiero conseguir es que haciendo lo anterior, con la sintaxis correcta, me muestre esto (este resultado lo puse a mano para intentar reflejar el resultado de lo que busco): Código: C:\Users\gregor>dir | findstr /C:"Desktop" | findstr /C:"Favorites" | findstr /C:"Music" Espero que con esto me explicara claramente ahora :D Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: Zomkar en 18 Abril 2016, 22:44 pm Vale, ahora si te entiendo.
A ver, lo primero, porque falla? Las pipes (|) redirigen la salida de un comando al input de otro. En la practica esto hace que: Código: dir | findstr /C:"Desktop" | findstr /C:"Favorites" Código: 18/04/2016 09:32 <DIR> Desktop Espero que se entienda. Ahora vamos a como hacer lo que quieres: Código: dir | findstr "Desktop Favorites Music" Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: gregory90 en 19 Abril 2016, 00:51 am Ok, probado y me sirve, exactamente era eso! más fácil de lo que pensaba... y yo intentando concatenar de mil formas posibles... :/ jaja
Gracias zomkar! Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: Zomkar en 19 Abril 2016, 01:53 am De nada, me alegro que te sirva :)
Título: Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr Publicado por: andres3626 en 26 Noviembre 2019, 19:50 pm Buenas tardes. Su ayuda por favor.
Tengo un archivo que tiene la siguiente linea 192.168.1.1 y deseo que el batch haga lo siguiente Si encuentra 192.168.1.1 escribir en archivo 192.168.1.2 escribir en archivo 192.168.1.3 Si no encuentra 192.168.1.1 escribir en archivo 192.168.1.1 escribir en archivo 192.168.1.2 escribir en archivo 192.168.1.3 tengo algo como esto FINDSTR /I "192.168.1.1" %windir%\system32\drivers\etc\hosts.* | FINDSTR /I "192.168.1.2" %windir%\system32\drivers\etc\hosts.* Pero no me funciona. Alguien con alguna idea de como puede ser el batch? Muchas gracias... |