【问题标题】:Copy file to multiple locations from CSV将文件从 CSV 复制到多个位置
【发布时间】:2017-03-07 05:35:52
【问题描述】:

我目前正在扫描一个目录和匹配的文件名,然后根据 csv 文件将它们复制到不同的文件共享位置。 CSV 文件应该有 2 个字段:目标列 = 复制的路径,字符串 Find column = 标识要复制的文件。

我的 CSV 文件是这样的:

"匹配文件名" , "目标"
"唐" , "c:\test\a"
"任务" , "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
      }
    }
  }
}

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    一方面,您的 CSV 中没有“查找”列。我将假设您标题为“匹配文件名”的列实际上具有标题“查找”。

    您的问题是由代码中的嵌套双循环引起的。您遍历每个模式,然后将所有匹配给定模式的文件从 CSV 复制到具有最内层循环的每个目标。

    对 CSV 数据只使用一个循环(以保持过滤字符串和目标路径之间的关联完好无损),问题就会消失。我还建议使用 Contains() 方法而不是 -like 运算符,因此您不需要在过滤字符串中添加通配符。

    Get-ChildItem $filepath | ForEach-Object {
      foreach ($filter in $csv) {
        if ($f.Name.Contains($filter.find)) {
          Copy-Item $_.FullName $filter.Destination
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2016-06-07
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2020-09-23
      相关资源
      最近更新 更多