[英]How to search a string in multiple files and return file name with line number/text in an Excel or csv in Powershell
[英]How to search a string in multiple files and return the names of files in Powershell?
几天前我已经开始学习 powershell,我在谷歌上找不到任何我需要的东西,所以请耐心等待我的问题。
我被要求将一些文本字符串替换为多个文件。 我不一定知道可能的目标文件的扩展名,也不知道它们的位置。 到目前为止,我已经设法递归地浏览到目录( get-ChildItem -recurse
)并使用 get-content 和 select-string 找到我正在寻找的字符串:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
问题是,我可以看到我正在寻找的文本的出现,但我不知道如何告诉 PS 返回每个匹配文件的路径和名称。
如何获取包含我要查找的表达式的文件的名称和位置?
这应该给出包含您的模式的文件的位置:
Get-ChildItem -Recurse | Select-String "dummy" -List | Select Path
这里有各种准确的答案,但这里是几种不同变体的最简洁的代码。 对于每个变体,顶行显示完整语法,底行显示简洁语法。
第 (2) 项是 Jon Z 和 manojlds 答案的更简洁形式,而第 (1) 项相当于 vikas368 和 buygrush 的答案。
列出包含模式的所有文件的FileInfo对象:
Get-ChildItem -Recurse | Where-Object { Select-String $_ -Quiet } ls -r | ? { sls $_ -q }
列出包含模式的所有文件的文件名:
Get-ChildItem -Recurse | Select-String | Select-Object -Unique Path ls -r | sls | select -u Path
列出所有不包含模式的文件的FileInfo对象:
Get-ChildItem -Recurse | Where-Object { !(Select-String $_ -Quiet) } ls -r | ? { !(sls $_ -q) }
列出所有不包含模式的文件的文件名:
(Get-ChildItem -Recurse | Where-Object { !(Select-String $_ -Quiet) }).FullName (ls -r | ? { !(sls $_ -q) }).FullName
这将显示它找到的与模式匹配的路径、文件名和内容行。
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
管道您的内容
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
fl *
您将看到该路径已作为对象的属性返回。
如果您只想要路径,请使用select path
或select -unique path
删除重复项:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
这就是我要做的,您不需要获取内容:
ls -r | Select-String dummy | select line,path
要么
ls -r | Select-String dummy | fl *
要查看不同的属性是什么...
这更快。 第二个参数是 -filter:
ls -r . *.bat | select-string netsh
ls -r . -filter *.bat | select-string netsh
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
这将为您提供所有文件的完整详细信息
要在结果数组中保留完整的文件详细信息,您可以对 vikas368 发布的答案稍加修改(这似乎不适用于 ISE 自动完成功能):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
或简而言之:
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
如果你搜索一个目录,你可以这样做:
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
这将显示包含搜索字符串的每个文件的完整路径列表:
foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}
请注意,它不会在结果上方显示标题,也不会显示包含搜索字符串的文本行。 它只告诉您在哪里可以找到包含该字符串的文件。
我修改了上面的答案之一,以提供更多信息。 这让我稍后再进行第二次查询。 它是这样的:
Get-ChildItem `
-Path "C:\data\path" -Filter "Example*.dat" -recurse | `
Select-String -pattern "dummy" | `
Select-Object -Property Path,LineNumber,Line | `
Export-CSV "C:\ResultFile.csv"
我可以使用此结构指定路径和文件通配符,并将文件名、行号和相关行保存到输出文件中。
使用 PowerShell,转到文件所在的路径,然后键入此命令并替换ENTER THE STRING YOU SEARCH HERE
(但保留双引号):
findstr /S /I /M /C:"ENTER THE STRING YOU SEARCH HERE" *.*
祝你有美好的一天🙂
此脚本工作在 3 000 000 中查找特定文件
参数 (
#Define o parametro do ano a eliminar "2020"
$DateDel = '2019',
#Define o parametro do registro do ficheiro "_800" ou "_800sm" ou "_200"
$ResFile1 = '_200',
$ResFile2 = '_800',
$ResFile3 = '_800sm',
#Define o parametro da terminacao do ficheiro "_800.jpg" ou "_800sm.jpg" ou "_200.jpg"
$TypeFile = '.jpg',
#Define o parametro de onde se localizado ficheiro "C:\users\Luis.Cunha\Desktop\LuisCunha\TarefaScript\TesteFinal\TesteScript1"
$HomePath = 'C:\Users\Luis.Cunha\Desktop\LuisCunha\TarefaScript'
)
#Inicia transcriçao de toda informação para o ficheiro .log indicado
Start-Transcript -Path $HomePath\CountDelItems.log -NoClobber -Append
Get-ChildItem $HomePath -Recurse -File | Measure-Object | %{$_.Count}
#o Get vai buscar o ficheiro com a data e a terminacao definidas no $homepath e $tipofich atraves do caminho indicado no $path
#depois confirma os valores que foram removidos com o verbose
Get-Childitem -Path $HomePath -Recurse -force | Where-Object { !$_.PSIsContainer -and $_.name -like "????$DateDel*$ResFile1$TypeFile" } | Measure-Object | %{$_.Count}
#Get-Childitem -Path $HomePath -Recurse -force | Where-Object { !$_.PSIsContainer -and $_.name -like "????$DateDel*$ResFile1$TypeFile" } | Remove-Item -Verbose -Force
Get-ChildItem $HomePath -Recurse -File | Measure-Object | %{$_.Count}
#Termina transcrição
Stop-Transcript
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.