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