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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  problema findstr
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema findstr  (Leído 2,643 veces)
ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
problema findstr
« en: 3 Octubre 2018, 16:37 pm »

Necesito buscar archivos en un directorio que contienen un texto metido a mano, para ello hago:

Código:
echo off set /p nombre=Dime tu nombre: echo Hola %nombre%!


echo off
set /p textoabuscar=escribe el texto a buscar:

Findstr /i /s /m /c:%textoabuscar% > archivos.txt
Pause

Pero no me saca nada. Quiero que solo me diga que archivos contienen lo introducido en el directorio


En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: problema findstr
« Respuesta #1 en: 3 Octubre 2018, 17:07 pm »

No te estoy entendiendo muy bien, explícate. lo que entendí : osea tienes un directorio con varios .txt y quieres crear un bat que busque en todos esos .txt una palabra. es eso?


En línea



ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: problema findstr
« Respuesta #2 en: 3 Octubre 2018, 17:10 pm »

Eso es, y que me cree un archivo en el que diga "tienes la palabra que has tecleado en estos archivos"
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: problema findstr
« Respuesta #3 en: 3 Octubre 2018, 18:46 pm »

Termine, me tarde por que la ultima vez que hice algo así me lleve 104 lineas y de paso código mal optimizado .

Pero ahora soy mas cuidadoso . y optimizo muy bien mis script.

El code Busca en todos los .txt la palabra que tu escribas. (Pon el bat en la carpeta donde tienes tus txt) o bueno lo modificas a tu gusto.

Código
  1. @echo off
  2. Rem By **Aincrad**
  3. del %temp%\a.txt>nul
  4. del lista.txt>nul
  5. :menu & cls  
  6. color a
  7. echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿    EL
  8. echo ³                                                               ³ H
  9. echo ³                                                               ³  a
  10. echo ³   Entrodusca la Palabra / Frase a Buscar.                     ³   c
  11. echo ³                                                               ³    k
  12. echo ³                                                               ³     e
  13. echo ³                                                               ³      r
  14. echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ       .NET
  15. echo    Create BY **Aincrad**  Foro el hacker.NET
  16. Set /P string=^>^>^>
  17. if not defined string (goto:menu) >NUL
  18. cls
  19.  
  20. for %%x in (*.txt) do (echo %%x >> %temp%\a.txt)
  21.  
  22. for /f "delims=·" %%A IN (%temp%\a.txt) do call:Bs "%%A"
  23.  
  24. :Bs
  25. cls
  26.   set file=%~1
  27.   if not exist %file% exit >nul
  28.   Echo Por Favor Espere...
  29.   findstr /i %string% %file%
  30.   if %errorlevel% == 0 echo Palabra %string% Encontrada en %file% >> lista.txt
  31.  

100% FUNCIONAL con palabras. y bien optimizado , pruebalo.
« Última modificación: 3 Octubre 2018, 18:54 pm por **Aincrad** » En línea



ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: problema findstr
« Respuesta #4 en: 3 Octubre 2018, 20:43 pm »

Termine, me tarde por que la ultima vez que hice algo así me lleve 104 lineas y de paso código mal optimizado .

Pero ahora soy mas cuidadoso . y optimizo muy bien mis script.

El code Busca en todos los .txt la palabra que tu escribas. (Pon el bat en la carpeta donde tienes tus txt) o bueno lo modificas a tu gusto.

Código
  1. @echo off
  2. Rem By **Aincrad**
  3. del %temp%\a.txt>nul
  4. del lista.txt>nul
  5. :menu & cls  
  6. color a
  7. echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿    EL
  8. echo ³                                                               ³ H
  9. echo ³                                                               ³  a
  10. echo ³   Entrodusca la Palabra / Frase a Buscar.                     ³   c
  11. echo ³                                                               ³    k
  12. echo ³                                                               ³     e
  13. echo ³                                                               ³      r
  14. echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ       .NET
  15. echo    Create BY **Aincrad**  Foro el hacker.NET
  16. Set /P string=^>^>^>
  17. if not defined string (goto:menu) >NUL
  18. cls
  19.  
  20. for %%x in (*.txt) do (echo %%x >> %temp%\a.txt)
  21.  
  22. for /f "delims=·" %%A IN (%temp%\a.txt) do call:Bs "%%A"
  23.  
  24. :Bs
  25. cls
  26.   set file=%~1
  27.   if not exist %file% exit >nul
  28.   Echo Por Favor Espere...
  29.   findstr /i %string% %file%
  30.   if %errorlevel% == 0 echo Palabra %string% Encontrada en %file% >> lista.txt
  31.  

100% FUNCIONAL con palabras. y bien optimizado , pruebalo.


funciona perfecto.

he añadido "" a %file% porque en archivos con varias palabras de nombre fallaba.

he intentado añadir 

set file=%~1
   if not exist %file% goto :exit
   Echo Por Favor Espere...
   findstr /i %string% "%file%"
   if %errorlevel% == 0 echo Palabra %string% Encontrada en %file% >> lista.txt


:exit
type lista.txt
pause
exit >nul

para que me muestre en la shell el archivo que genera antes de salir, pero deja de funcionar porque solo me registra 1 archivo.

que le sucede?
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: problema findstr
« Respuesta #5 en: 3 Octubre 2018, 21:15 pm »

Código
  1. @echo off
  2. Rem By **Aincrad**
  3. del %temp%\a.txt>nul
  4. del lista.txt>nul
  5. :menu & cls  
  6. color a
  7. echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿    EL
  8. echo ³                                                               ³ H
  9. echo ³                                                               ³  a
  10. echo ³   Entrodusca la Palabra / Frase a Buscar.                     ³   c
  11. echo ³                                                               ³    k
  12. echo ³                                                               ³     e
  13. echo ³                                                               ³      r
  14. echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ       .NET
  15. echo    Create BY **Aincrad**  Foro el hacker.NET
  16. Set /P string=^>^>^>
  17. if not defined string (goto:menu) >NUL
  18. cls
  19.  
  20. for %%x in (*.txt) do (echo %%x >> %temp%\a.txt)
  21.  
  22. for /f "delims=·" %%A IN (%temp%\a.txt) do call:Bs "%%A"
  23.  
  24.  
  25.  
  26. :leer
  27. cls
  28. color b
  29. type lista.txt
  30. pause>nul
  31. exit
  32.  
  33. :Bs
  34. cls
  35.   set file=%~1
  36.   if not exist %file% goto leer
  37.   Echo Por Favor Espere...
  38.   findstr /i %string% "%file%"
  39.   if %errorlevel% == 0 echo Palabra %string% Encontrada en %file% >> lista.txt
En línea



ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: problema findstr
« Respuesta #6 en: 3 Octubre 2018, 22:13 pm »

No veo la diferencia, no lo entiendo. Lo único que veo que tenía mal en foto editada que tenía :exit
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: problema findstr
« Respuesta #7 en: 3 Octubre 2018, 22:23 pm »

Solo tenias q dejar la Sub-rutina BS :

Código
  1. :Bs
  2. cls
  3.   set file=%~1
  4.   if not exist %file% goto leer
  5.   Echo Por Favor Espere...
  6.   findstr /i %string% "%file%"
  7.   if %errorlevel% == 0 echo Palabra %string% Encontrada en %file% >> lista.txt

De ultimo (osea al final de batch) y ya eso es todo. eso se debe por que no puse el :

Código:
GOTO :EOF

Eso era todo.

PD: no te puedo explicar mas por que ando un poco ocupado. vuelvo dentro de unas 3 horas bay.
« Última modificación: 3 Octubre 2018, 22:26 pm por **Aincrad** » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: problema findstr
« Respuesta #8 en: 3 Octubre 2018, 23:31 pm »

Existen multitud de aplicaciones comerciales/profesionales, como por ejemplo FileLocator Pro, software el cual recomiendo encarecidamente para buscar texto en todo tipo de archivos mediante filtros y expresiones regulares.

Pero si por cualquier motivo no quieres recurrir a ese tipo de aplicaciones y si en su lugar prefieres hacerlo mediante un lenguaje de scripting soportado por Windows, entonces Batch es la peor herramienta que existe a tu disposición, muy limitada e ineficiente en términos de rendimiento, sobre todo en la manipulación/lectura de archivos de texto, por eso es mucho mejor recurrir a lenguajes más óptimos como sería Visual Basic Script o Powershell para el siguiente ejemplo que he escrito...

Script.ps1
Código
  1. [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
  2.  
  3. [string]$dirPath  = $([System.IO.Directory]::GetCurrentDirectory())
  4. [string]$fileExt  = "txt"
  5. [enum]  $textCase = [System.StringComparison]::OrdinalIgnoreCase
  6.  
  7. Do {
  8.    [string]$keyword = [Microsoft.VisualBasic.Interaction]::InputBox("Enter the keyword to find:",
  9.                                                                     "Search text within *.$fileExt files...")
  10. } while ( [System.String]::IsNullOrEmpty($keyword) )
  11.  
  12. [System.Collections.ArrayList]$files = New-Object System.Collections.ArrayList
  13.  
  14. Get-ChildItem $dirPath -Filter *.$fileExt |
  15. Foreach-Object {
  16.    [string]$content = [System.IO.File]::ReadAllText($_.FullName)
  17.       [int]$indexOf = $content.IndexOf($keyword, $textCase)
  18.  
  19.    if ($indexOf -ne -1) {
  20.        $files.Add($_.FullName) > $null
  21.    }
  22.  
  23. }
  24.  
  25. [string]$title = [string]::Format("Directory: '{0}'' | Found {1} *.{2} files containing keyword: '{3}'",
  26.                                  $dirPath, ($files.Count), $fileExt, $keyword)
  27.  
  28. Write-Host $title
  29.  
  30. if ($files.Count -ne 0) {
  31.    Get-ChildItem $files
  32.    Get-ChildItem $files | Out-GridView -Title $title -PassThru
  33. }
  34.  
  35. $files.Clear()
  36. Exit(0)







De todas formas si quieres hacerlo en Batch, lo cual no recomiendo en absoluto, puedes guiarte por este ejemplo de aquí abajo o también los que ya te hayan mostrado previamente en los comentarios de arriba...

Script.cmd
Código
  1. @Echo OFF & (CHCP 1252)1>Nul
  2.  
  3. Set    "dirPath=%~dp0"
  4. Set    "fileExt=txt"
  5. Set    "textCase=/I"
  6. Set /P "keyword=Enter the keyword to find in *.%fileExt% files: "
  7.  
  8. CLS
  9. FOR %%# IN ("%dirPath%\*.%fileExt%") DO (
  10.    (FindStr.exe %textCase% "%keyword%" "%%~f#")1>NUL && (
  11.        Echo:%%~nx#
  12.    )
  13. )
  14.  
  15. Exit /B 0

Saludos.
« Última modificación: 4 Octubre 2018, 01:22 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con variables y findstr
Scripting
henry7512 1 2,927 Último mensaje 13 Abril 2007, 22:50 pm
por nhaalclkiemr
[BATCH] Findstr, ¿Como repetir coincidencias?
Scripting
Eleкtro 0 2,351 Último mensaje 17 Marzo 2012, 06:37 am
por Eleкtro
[BATCH] Problema al intentar poner el resultado de findstr dentro de variable
Scripting
XXLuigiMario 3 4,524 Último mensaje 17 Agosto 2012, 15:26 pm
por XXLuigiMario
(solucionado) [batch] error con findstr
Scripting
shadowhunter 8 5,459 Último mensaje 10 Octubre 2013, 21:20 pm
por Eleкtro
Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
Scripting
gregory90 9 6,375 Último mensaje 26 Noviembre 2019, 19:50 pm
por andres3626
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines