Powershell 基于阵列中的部分文件名移动文件

Powershell 基于阵列中的部分文件名移动文件,powershell,Powershell,我试图根据文本文件中的前缀列表移动文件,以匹配动态生成的实际文件的一部分 文本文件中的前缀示例: 103 1stCity 25 2ndCity 302 3rdCity 如果所有匹配的文件都应转到同一目标文件夹,则应根据前缀文件构建正则表达式,并将其锚定在字符串开头: $prefixes = Get-Content 'P:\some\path\to\PrefixOfClientNames.txt' | ForEach-Object { [regex]::Escape($_)

我试图根据文本文件中的前缀列表移动文件,以匹配动态生成的实际文件的一部分

文本文件中的前缀示例:

103 1stCity 25 2ndCity 302 3rdCity
如果所有匹配的文件都应转到同一目标文件夹,则应根据前缀文件构建正则表达式,并将其锚定在字符串开头:

$prefixes = Get-Content 'P:\some\path\to\PrefixOfClientNames.txt' |
            ForEach-Object { [regex]::Escape($_) }

$pattern = '^{0}' -f ($prefixes -join '|')
然后使用管道移动匹配的文件:

Get-ChildItem -Path $search_folder | Where-Object {
    $_.Name -match $pattern
} | Move-Item -Destination $destination_folder -WhatIf

如果所有匹配的文件都应转到同一目标文件夹,则应根据前缀文件构建正则表达式,并将其锚定在字符串开头:

$prefixes = Get-Content 'P:\some\path\to\PrefixOfClientNames.txt' |
            ForEach-Object { [regex]::Escape($_) }

$pattern = '^{0}' -f ($prefixes -join '|')
然后使用管道移动匹配的文件:

Get-ChildItem -Path $search_folder | Where-Object {
    $_.Name -match $pattern
} | Move-Item -Destination $destination_folder -WhatIf
其他方法

$file_list = Get-Content "C:\Temp\prefix.txt" | %{$_ + '*'}
$search_folder = "C:\Temp\searchfolder"
$destination_folder = "C:\Temp\searchfolder"

Get-ChildItem $search_folder -file -Recurse | %{

$name=$_.BaseName
$fullname=$_.FullName 

 if (($file_list | where { $name -like $_} | select -First 1).Count -gt 0)
 {
   Move-Item $fullname $destination_folder -WhatIf

 }

}
其他方法

$file_list = Get-Content "C:\Temp\prefix.txt" | %{$_ + '*'}
$search_folder = "C:\Temp\searchfolder"
$destination_folder = "C:\Temp\searchfolder"

Get-ChildItem $search_folder -file -Recurse | %{

$name=$_.BaseName
$fullname=$_.FullName 

 if (($file_list | where { $name -like $_} | select -First 1).Count -gt 0)
 {
   Move-Item $fullname $destination_folder -WhatIf

 }

}

Ansgar-谢谢你-我需要花一点时间来剖析你的代码,但看起来它应该可以工作。下面我对Espernto57语法的理解要简单一些。Ansgar-谢谢你-我需要花一点时间来剖析你的代码,但看起来它应该可以工作。下面我理解Esperento57语法稍微容易一点。