Home > database >  I need my Get-ChildItem string search command print file names along with their Date Modified values
I need my Get-ChildItem string search command print file names along with their Date Modified values

Time:05-01

I spent quite some time searching for the solution of my problem, but found nothing. I have one single folder with mostly .html files, and I frequently need to search to find the files that contain certain strings. I need the search result to be displayed with just the file name (as the file will only be in that one folder) and file's last write time. The list needs to be sorted by the last write time. This code works perfectly for finding the correct files

Get-ChildItem -Filter *.html -Recurse | Select-String -pattern "keyWord string" | group path | select name

The problem with it is that it displays the entire path of the file (which is not needed), it does not show the last write time, and it is not sorted by the last write time.

I also have this code

Get-ChildItem -Attributes !Directory *.html | Sort-Object -Descending -Property LastWriteTime | Select-Object Name, LastWriteTime

That code prints everything exactly as I want to see it, but it prints all the file names from the folder instead of printing only the files that I need to find with a specific string in them.

CodePudding user response:

Since you are only using Select-String to determine if the text exists in any of the files move it inside a Where-Object filter and use the -Quiet parameter so that it returns true or false. Then sort and select the properties you want.

Get-ChildItem -Filter *.html | 
    Where-Object { $_ | Select-String -Pattern 'keyWord string' -Quiet } | 
        Sort-Object LastWriteTime | 
            Select-Object Name, LastWriteTime

CodePudding user response:

If you don't care about it being a bit redundant, you can Get-ChildItem the results after your searching:

Get-ChildItem -Filter *.html -Attributes !Directory -Recurse | Select-String -Pattern "keyWord string" | group path | foreach {Get-ChildItem $_.Name } |  Sort-Object -Descending LastWriteTime | Select Name,LastWriteTime

After you Select-String you get the attributes of that object instead of the original, so we're taking the results of that object and passing it back into the Get-ChildItem command to retrieve those attributes instead.

  • Related