繁体   English   中英

将文件从CSV复制到多个位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM