当文件包含特定单词时移动文件



我目前正在尝试编写一个Powershell脚本,该脚本可以查看给定目录中的所有文件,并在找到特定单词时将它们移动到其他目录。

这是我目前拥有的:

$source = "Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test"
$hans = Get-ChildItem Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test -filter *.txt -recurse 
foreach($hans in $source) {
    select-string -list -pattern "24BHD" -path $source
}

现在我需要添加什么才能使脚本移动包含字符串的文件24BHD

所有的帮助将不胜感激!

$source = 'Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test'   
$dest = 'c:dest'
Get-ChildItem $source -filter *.txt -recurse | Select-String -List -Pattern "24BHD" | ForEach-Object {
    Move-Item $PSItem.Path -Destination $dest
}

编辑:此示例更好,仅使用管道。Get-ChildItem 的输出通过管道传输到 Select-String,用于筛选内容中包含"24BHD"的文件。匹配的文件通过管道传输到移动项。在上面的例子中,我使用了Foreach-Object,因为我认为Move-Item无法处理Select-String的输出。这是不必要的,因为PowerShell的参数绑定可以完美地解决这个问题。

仍然有一个警告:如果 de 文件夹结构中存在重复的文件名 $source,Move-Item 将在 $dest 文件夹中遇到名称冲突

$source = 'Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test'   
$dest = 'c:dest'
Get-ChildItem $source -filter *.txt -recurse | 
  Select-String -List -Pattern "24BHD" |
  Move-Item -Destination $dest

有关参数绑定的更多信息,请参阅:https://4sysops.com/archives/parameter-binding-in-the-powershell-pipeline/

你非常接近,但foreach语法并没有按照你的想法做。

您需要使用 foreach ($item in $hans) ,其中$hans是文件的集合,$item表示"循环"期间数组中的每个"文件"。

$item变量名称可以是您想要的任何内容,这只是我使用的示例)

FullName 属性包含文件的完整路径,这是 Select-String -Path 所需的。

然后使用 Move-Item如果返回匹配项Select-String

$source = 'Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test'
$destination = 'C:Destination'
$pattern = '24BHD'
$hans = Get-ChildItem $source -filter *.txt -recurse 
foreach($item in $hans) {
    if (Select-String -list -pattern $pattern -path $item.fullname) {
        Move-Item -Path $item.fullname -Destination $destination
    }
}
您可以使用

如下所示的-match比较:

$source = "Z:Documents16_Med._AppAufträgeRuheEKG_24HBP_SkriptUrsprung_test"
$dest = "C:destinationdirectory"
$find = "24BHD"
foreach ($file in (Get-ChildItem "$source*.txt" -Recurse)) {
    if ($file.Name -match $find) {
        Move-Item $file $dest
    }
}

最新更新