脚本中的错误消息

时间:2016-09-09 11:46:50

标签: powershell

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

我有.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

3 个答案:

答案 0 :(得分:2)

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

要解决此问题,您可以使用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
}

答案 1 :(得分:0)

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

mkdir c:\test\

或者,如果目录可能存在

mkdir c:\test\ -Force

答案 2 :(得分:0)

您需要在尝试复制文件夹之前创建文件夹。

这是一种方法,可以简化您的工作,但需要额外的一行来处理文件夹'创建

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)