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[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
[string
]$dirPath = $
([System.IO
.Directory
]::GetCurrentDirectory()) [string]$fileExt = "txt"
[enum
] $textCase = [System.StringComparison
]::OrdinalIgnoreCase
Do {
[string]$keyword = [Microsoft.VisualBasic.Interaction]::InputBox("Enter the keyword to find:",
"Search text within *.$fileExt files...")
} while ( [System.String
]::IsNullOrEmpty($keyword) )
[System.Collections
.ArrayList
]$files = New
-Object
System.Collections
.ArrayList
Get-ChildItem $dirPath -Filter *.$fileExt |
Foreach-Object {
[string
]$content = [System.IO
.File]::ReadAllText($_.FullName
) [int]$indexOf = $content.IndexOf($keyword, $textCase)
if ($indexOf -ne -1) {
$files.Add($_.FullName) > $null
}
}
[string]$title = [string]::Format("Directory: '{0}'' | Found {1} *.{2} files containing keyword: '{3}'",
$dirPath, ($files.Count), $fileExt, $keyword)
Write-Host $title
if ($files.Count -ne
0) { Get-ChildItem $files
Get
-ChildItem
$files | Out
-GridView
-Title
$title -PassThru }
$files.Clear()
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
Set /P "keyword=Enter the keyword to find
in *.
%fileExt% files: "
CLS
FOR %%#
IN ("
%dirPath%\*.
%fileExt%"
) DO ( (FindStr.exe
%textCase% "
%keyword%" "
%%~f#"
)1
>NUL && ( )
)
Saludos.