这在某种程度上基于:
在该问题中,关注的是将文件标题中带有子字符串的文件移动到子目录。
就我而言,我想将与正文中的确切字符串匹配的文件(即文本文件的内容)移动到子目录。
根据上述问题的答案,我得出:
$source = 'C:\ListOfWater\'
$destination = 'C:\ListOfWater\Seas'
Get-ChildItem $source -filter *.txt | Select-String -List "Sea" | ForEach-Object {
Move-Item $PSItem.Path -Destination $destination
}
但是,它会选取与子字符串匹配的单词,而不是“整个单词匹配”。
使用正则表达式精确匹配字符串,例如:
Get-ChildItem $source -filter *.txt | Select-String -List "^Sea$" | ForEach-Object {
Move-Item $PSItem.Path -Destination $destination
}
^
和 $
匹配开始和结束。您可以更明确地使用单词边界:
"\bSea\b"
您可以更改 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”的文件才会被移动到子目录。