我需要我的 Get-ChildItem 字符串搜索命令打印文件名及其修改日期值,已排序
I need my Get-ChildItem string search command print file names along with their Date Modified values, sorted
我花了很多时间寻找问题的解决方案,但一无所获。我有一个主要包含 .html 文件的文件夹,我经常需要搜索以查找包含特定字符串的文件。我需要只显示文件名(因为文件只会在那个文件夹中)和文件的上次写入时间的搜索结果。该列表需要按上次写入时间排序。此代码非常适合查找正确的文件
Get-ChildItem -Filter *.html -Recurse | Select-String -pattern "keyWord string" | group path | select name
它的问题是它显示了文件的整个路径(不需要),它没有显示最后写入时间,并且没有按照最后写入时间排序。
我也有这个代码
Get-ChildItem -Attributes !Directory *.html | Sort-Object -Descending -Property LastWriteTime | Select-Object Name, LastWriteTime
该代码完全按照我希望的方式打印所有内容,但它打印文件夹中的所有文件名,而不是仅打印我需要查找的包含特定字符串的文件。
如果你不介意它有点多余,你可以Get-ChildItem
搜索后的结果:
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
在 Select-String
之后,您获得了该对象的属性而不是原始属性,因此我们获取该对象的结果并将其传回 Get-ChildItem
命令以检索这些属性相反。
由于您仅使用 Select-String 来确定文本是否存在于任何文件中,因此请将其移动到 Where-Object
过滤器中并使用 -Quiet
参数,以便它 returns 真或假。然后排序并select你想要的属性。
Get-ChildItem -Filter *.html |
Where-Object { $_ | Select-String -Pattern 'keyWord string' -Quiet } |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime
对于多个模式,您可以这样做的一种方法是这样
Get-ChildItem -Filter *.html |
Where-Object {
($_ | Select-String -Pattern 'keyWord string' -Quiet) -and
($_ | Select-String -Pattern 'keyWord string #2' -Quiet)
} |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime
另一种使用 Select-String 和多个模式的方法可能会更快一些
$patterns = 'keyword 1', 'keyword 2', 'keyword 3'
Get-ChildItem -Filter *.html |
Where-Object {
($_ | Select-String -Pattern $patterns | Select-Object -Unique Pattern ).Count -eq $patterns.Count
} |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime
我花了很多时间寻找问题的解决方案,但一无所获。我有一个主要包含 .html 文件的文件夹,我经常需要搜索以查找包含特定字符串的文件。我需要只显示文件名(因为文件只会在那个文件夹中)和文件的上次写入时间的搜索结果。该列表需要按上次写入时间排序。此代码非常适合查找正确的文件
Get-ChildItem -Filter *.html -Recurse | Select-String -pattern "keyWord string" | group path | select name
它的问题是它显示了文件的整个路径(不需要),它没有显示最后写入时间,并且没有按照最后写入时间排序。
我也有这个代码
Get-ChildItem -Attributes !Directory *.html | Sort-Object -Descending -Property LastWriteTime | Select-Object Name, LastWriteTime
该代码完全按照我希望的方式打印所有内容,但它打印文件夹中的所有文件名,而不是仅打印我需要查找的包含特定字符串的文件。
如果你不介意它有点多余,你可以Get-ChildItem
搜索后的结果:
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
在 Select-String
之后,您获得了该对象的属性而不是原始属性,因此我们获取该对象的结果并将其传回 Get-ChildItem
命令以检索这些属性相反。
由于您仅使用 Select-String 来确定文本是否存在于任何文件中,因此请将其移动到 Where-Object
过滤器中并使用 -Quiet
参数,以便它 returns 真或假。然后排序并select你想要的属性。
Get-ChildItem -Filter *.html |
Where-Object { $_ | Select-String -Pattern 'keyWord string' -Quiet } |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime
对于多个模式,您可以这样做的一种方法是这样
Get-ChildItem -Filter *.html |
Where-Object {
($_ | Select-String -Pattern 'keyWord string' -Quiet) -and
($_ | Select-String -Pattern 'keyWord string #2' -Quiet)
} |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime
另一种使用 Select-String 和多个模式的方法可能会更快一些
$patterns = 'keyword 1', 'keyword 2', 'keyword 3'
Get-ChildItem -Filter *.html |
Where-Object {
($_ | Select-String -Pattern $patterns | Select-Object -Unique Pattern ).Count -eq $patterns.Count
} |
Sort-Object LastWriteTime |
Select-Object Name, LastWriteTime