如何在多个文件中搜索字符串并返回文件名(使用Powershell)?

435

我几天前开始学习PowerShell,但我在谷歌上找不到我需要的内容,请耐心看完我的问题。

现在有人让我把一些文本字符串替换到多个文件中。我不知道这些文件的可能扩展名,也不知道它们的位置。到目前为止,我已经成功地使用get-ChildItem -recurse递归浏览了目录,并通过get-content和select-string查找到了我要查找的字符串:

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"

问题是,我能看到包含我要查找的文本的位置,但我不知道如何告诉PS也返回每个匹配文件的路径和名称。

我该如何获取包含我要查找的表达式的文件的名称和位置?


4
也许将问题编辑得更为通用一些会更好。这个问题的答案似乎与JBoss或您正在处理的应用程序无关...... - Kellen Stuart
10
我刚看到你的评论并编辑了我的问题……两年后!迟做总比不做好。 :) - Bluz
12个回答

4

这将显示包含搜索字符串的每个文件的完整路径列表:

foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}

请注意,它不会在结果上方显示标题,并且不会显示包含搜索字符串的文本行。它只告诉您可以找到包含该字符串的文件的位置。

2
有什么想法可以显示匹配模式的行号和文件名? - Piotr L

-1

这个脚本可以在 3,000,000 个文件中找到特定的文件。

Param
(

     #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 

这并没有回答问题,问题是要求检索具有匹配内容的文件的路径,而不是像这样检索具有匹配名称的文件数。 - Lance U. Matthews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接