【问题标题】:Error message in script脚本中的错误消息
【发布时间】:2016-09-09 22:08:51
【问题描述】:

我正在尝试编写一个解决方案,将一些文件从一个位置复制到另一个位置..

我有一个 .csv 格式的文件列表,带有标题

"ParentFolder, Name, FullName, lastwritetime."

文件内容是,有数百行,不同的路径,但相同的驱动器号:

"X:\clients\A90\201AA3.05\","2012.08 RAP Proposal.xlsm","X:\clients\A90\201AA3.05\2012.08 RAP Proposal.xlsm","20/05/2016 10:41:08"

我想做的是复制上面的.. "X:\clients\A90\201AA3.05\2012.08 RAP Proposal.xlsm" 到具有不同驱动器但目录结构相同的新位置。所以在 csv 文件中我有文件名和路径,但我不确定如何从那里分割驱动器并创建一个变量。

我有一个 foreach 循环..

$ToCopy = Import-Csv "c:\temp\log.csv"
foreach($Line in $ToCopy)
{
    $FullPath = $Line.ParentFolder
    $File = $Line.Name
    $FullName = $Line.FullName   

    $file = "$FullPath\$FullName"
    $DestPath = Split-Path $FullPath -NoQualifier
    Copy-Item "$FullName" -Destination c:\test\$DestPath
}

我得到的错误信息是:

+ CategoryInfo          : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException
+ FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand

Copy-Item : Could not find a part of the path 'C:\test\clients\A90\Support\_index0901\'.
At line:9 char:9
+         Copy-Item "$FullName" -Destination c:\test\$DestPath
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException
+ FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您收到错误是因为您的目标路径的目录结构可能不存在

    为了解决这个问题,您可以使用 New-Item ... -Force 创建一个“临时”文件,如果需要,它会创建丢失的目录,然后使用 Copy-Item 覆盖该文件,就像这样

    $ToCopy = Import-Csv "c:\temp\log.csv"
    foreach($Line in $ToCopy)
    {
        $FullPath = $Line.ParentFolder
        $File = $Line.Name
        $FullName = $Line.FullName   
    
        $file = "$FullPath\$FullName"
        $DestPath = Split-Path $FullPath -NoQualifier
        $DestFile = c:\test\$DestPath
        New-Item -ItemType File -Force $DestFile
        Copy-Item "$FullName" -Destination $DestFile -Force
    }
    

    【讨论】:

      【解决方案2】:

      您需要先创建文件夹,然后再尝试在其中复制文件。

      这是一种实现方式,比您现有的方式进行了简化,但添加了一行来处理文件夹的创建。

      foreach($File in $ToCopy)
      {
          $DestPath = Join-Path -Path 'c:\test' -ChildPath ( Split-Path $File.ParentFolder -NoQualifier )
          If ( -not ( Test-Path -Path $DestPath ) ) { New-Item -Path $DestPath -Force -ItemType Directory }
          Copy-Item $File.FullName -Destination $DestPath -WhatIf
      }
      

      (小心,我将迭代变量从 $Line 更改为 $File)

      【讨论】:

        【解决方案3】:

        您正试图将文件复制到不存在的c:\test\ 目录中。在循环之前创建这个目录:

        mkdir c:\test\
        

        或者,如果目录可能存在

        mkdir c:\test\ -Force
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-08
          • 1970-01-01
          • 1970-01-01
          • 2021-07-30
          • 2016-02-03
          • 2016-03-23
          • 2013-03-18
          • 1970-01-01
          相关资源
          最近更新 更多