[英]Copy file to multiple locations from CSV
我目前正在扫描目录并匹配文件名 ,然后将它们复制到基于csv文件的各种文件共享位置。 CSV文件应具有2个字段:目标列=复制路径,字符串查找列=标识要复制的文件。
我的CSV文件是这样的:
"matching file names" , "Destination" "Don" , "c:\test\a" "Quest" , "c:\test\b"
当前,它将所有文件复制到所有位置。
脚本:
$csv = Import-Csv -Path "C:\Temp\list.csv"
$filepath = 'C:\Temp\Source'
Get-ChildItem $filepath | foreach {
$criteria = $csv
$find = $csv | select -ExpandProperty find
$a = $_.FullName
foreach ($f in $find) {
if ($a -like "*$f*") {
foreach ($c in $criteria) {
Copy-Item $_.FullName $c.Destination
}
}
}
}
一方面,您的CSV中没有“查找”列。 我将假设您标题为“匹配文件名”的列实际上具有标题“ find”。
您的问题是由代码中的嵌套双循环引起的。 遍历每个模式,然后将与给定模式匹配的所有文件从CSV具有最内层循环的位置复制到每个目标。
仅对CSV数据使用一个循环(以保持过滤器字符串和目标路径之间的关联完整),问题将消失。 我还建议您使用Contains()
方法而不是-like
运算符,因此您无需在过滤字符串中添加通配符。
Get-ChildItem $filepath | ForEach-Object {
foreach ($filter in $csv) {
if ($f.Name.Contains($filter.find)) {
Copy-Item $_.FullName $filter.Destination
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.