我正在尝试根据文本文件中的前缀列表移动文件,以匹配动态生成的实际文件的一部分。
文本文件中的前缀示例:
103 1stCity 25 2ndCity 302 3rdCity
没有逗号,每个城市都是文本文件中的新行(不是CSV格式)。
要搜索的文件示例:
103 1stCity 20170901 12387.txt 129 OtherCity 20170905 354568.txt
这就是我所拥有的:
$file_list = Get-Content "P:\some\path\to\PrefixOfClientNames.txt"
$search_folder = "J:\FilesToSearch_SomeStayHere"
$destination_folder = "J:\SomeFilesGetMovedHere"
foreach ($file in $file_list) {
$file_to_move = Get-ChildItem -Path $search_folder |
Where-Object { $_.Name -like $file }
if ($file_to_move) {
Move-Item $file_to_move $destination_folder -WhatIf
}
答案 0 :(得分:3)
如果所有匹配的文件都应该转到同一目标文件夹,那么您将从前缀文件构建正则表达式并将其锚定在字符串的开头:
$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
答案 1 :(得分:0)
其他方法
$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
}
}