簡體   English   中英

如何在多個文件中搜索一個字符串並返回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 的答案。

  1. 列出包含模式的所有文件的FileInfo對象:

     Get-ChildItem -Recurse  | Where-Object { Select-String  $_ -Quiet } ls -r  | ? { sls  $_ -q }
  2. 列出包含模式的所有文件的文件名

     Get-ChildItem -Recurse  | Select-String  | Select-Object -Unique Path ls -r  | sls  | select -u Path
  3. 列出所有包含模式的文件的FileInfo對象:

     Get-ChildItem -Recurse  | Where-Object { !(Select-String  $_ -Quiet) } ls -r  | ? { !(sls  $_ -q) }
  4. 列出所有包含模式的文件的文件名

     (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 pathselect -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM