首页 文章

如何在多个文件中搜索字符串并返回Powershell中的文件名?

提问于
浏览
221

我几天前开始学习powershell,我在google上找不到任何我需要的东西,所以请忍受我的问题 .

我被要求将一些文本字符串替换为多个文件 . 我不一定知道可能的目标文件的扩展名,也不知道它们的位置 . 到目前为止,我已经设法以递归方式浏览目录( get-ChildItem -recurse ),并使用get-content和select-string查找我正在寻找的字符串:

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

问题是,我可以看到我正在寻找的文本的出现,但我不知道如何告诉PS返回每个匹配文件的路径和名称 .

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

9 回答

  • 350

    管道你的内容

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

    fl *

    您将看到该路径已作为对象的属性返回 .

    如果您只想要路径,请使用 select pathselect -unique path 删除重复项:

    Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
    
  • 53

    我就是这样做的,你不需要get-content:

    ls -r | Select-String dummy | select line,path
    

    要么

    ls -r | Select-String dummy | fl *
    

    要了解不同的属性是什么......

  • 8

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

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

    请注意,它不会在结果上方显示 Headers ,也不会显示包含搜索字符串的文本行 . 所有它告诉你在哪里可以找到包含字符串的文件 .

  • 3

    如果搜索到一个目录,则可以执行以下操作:

    select-string -Path "c:\temp\*.*" -Pattern "result"  -List | select Path
    
  • 3

    这将显示它找到的与模式匹配的路径,文件名和内容行 .

    Get-ChildItem -Path d:\applications\*config -recurse |  Select-String -Pattern "dummy"
    
  • 15

    这应该给出包含您的模式的文件的位置:

    Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
    
  • 6
    Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
    

    这将为您提供所有文件的完整详细信息

  • 9

    要在结果数组中保留完整的文件详细信息,您可以稍微修改vikas368发布的答案(这似乎不适用于ISE自动完成):

    Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
    

    或简而言之:

    ls -r | ?{ $_ | Select-String -Pattern "dummy" }
    
  • 5

    这里有各种准确的答案,但这里有几个不同变体的最简洁的代码 . 对于每个变体,顶行显示完整语法,底部显示简洁语法 .

    项目(2)是Jon Z和manojlds的答案的更简洁形式,而项目(1)相当于vikas368和buygrush的答案 .

    • 列出包含模式的所有文件的 FileInfo 对象:
    Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet }
    ls -r filespec | ? { sls pattern $_ -q }
    
    • 列出包含模式的所有文件的 file names
    Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path
    ls -r filespec | sls pattern | select -u Path
    
    • 列出包含模式的所有文件的 FileInfo 对象 not
    Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }
    ls -r filespec | ? { !(sls pattern $_ -q) }
    
    • 列出包含模式的所有文件 notfile names
    (Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName
    (ls -r filespec | ? { !(sls pattern $_ -q) }).FullName
    

相关问题