PowerShell 移动正文中包含确切字符串的所有文件

问题描述 投票:0回答:2

这在某种程度上基于:

Powershell 移动具有匹配子字符串的文件

在该问题中,关注的是将文件标题中带有子字符串的文件移动到子目录。

就我而言,我想将与正文中的确切字符串匹配的文件(即文本文件的内容)移动到子目录。

根据上述问题的答案,我得出:

$source = 'C:\ListOfWater\'
$destination = 'C:\ListOfWater\Seas'

Get-ChildItem $source -filter *.txt  | Select-String -List "Sea" | ForEach-Object {
Move-Item $PSItem.Path -Destination $destination
}

但是,它会选取与子字符串匹配的单词,而不是“整个单词匹配”。

powershell matching get-childitem select-string
2个回答
1
投票

使用正则表达式精确匹配字符串,例如:

Get-ChildItem $source -filter *.txt  | Select-String -List "^Sea$" | ForEach-Object {
Move-Item $PSItem.Path -Destination $destination
}

^
$
匹配开始和结束。您可以更明确地使用单词边界:

"\bSea\b"

0
投票

您可以更改 PowerShell 脚本以将 -SimpleMatch 参数与 Select-String 结合使用,以保证只有正文中具有精确字符串匹配的文件(文本文件内容)才会移动到子文件夹。通过使用文字匹配而不是正则表达式匹配,此参数可确保仅选择包含精确字符串的文件。这是修改后的脚本:

PowerShell 代码复制器

$source = 'C:\ListOfWater\'
$destination = 'C:\ListOfWater\Seas'

Get-ChildItem $source -Filter *.txt | ForEach-Object {
    if (Select-String -Path $_.FullName -Pattern "Sea" -SimpleMatch) {
        Move-Item $_.FullName -Destination $destination
    }
}

要在每个文本文件的内容中查找精确的字符串“Sea”,请使用带有 -SimpleMatch 选项的 Select-String。 如果发现匹配,则文件将传输到 $destination 指示的目标目录。 通过进行此更改,可以防止与子字符串的匹配,并且只有在其正文中包含精确字符串“Sea”的文件才会被移动到子目录。

© www.soinside.com 2019 - 2024. All rights reserved.