Copy-Item的语法和连接目录\文件

时间:2013-01-30 20:47:20

标签: powershell

我正在尝试将文件从一个位置复制到另一个位置。我有一个CSV,其中包含目录,名称和其他一些对移动不重要的字段。我很确定我的代码试图移动整个文件夹结构而不仅仅是文件。我怎样才能移动文件? OR 如何将类似的文件夹结构移动到新位置(\ folder \ username)

目录看起来像:

\\server\folder\username

我正在尝试的代码:

Import-Csv c:\movefiles.csv | ForEach-Object {Copy-Item -LiteralPath ($_.Directory + "\" + $_.name) -Destination c:\}

目标实际上是另一台服务器上的位置。

1 个答案:

答案 0 :(得分:0)

您尝试的代码应该复制文件(只要name属性是文件的名称)并将其保存在c:\中,就像您想要的那样。您可能希望使用Join-Path来组合目录和文件名,而不是当前的方法。它确保您没有多个\等。例如:

ForEach-Object {Copy-Item -LiteralPath (Join-Path $_.Directory $_.name) -Destination c:\}

使用folderstructure复制(未经测试):

function MoveTo-NewServer {
    param(
    [Parameter(Mandatory=$true)]
    $Csvpath,
    [Parameter(Mandatory=$true)]
    $Newserver)

    if(Test-Path $Csvpath -PathType Leaf) {
        Import-Csv $Csvpath | ForEach-Object {
            $h = ([uri]$_.directory).Host
            $src = Join-Path $_.Directory $_.name
            $dest = $src.Replace($h, $Newserver)
            if(!(Test-Path $dest)) { New-Item $dest -ItemType File -Force }
            Copy-Item -LiteralPath $src -Destination $dest -Force
        }
    }
}

如上所述,这是未经测试的。尝试使用它:

MoveTo-NewServer -Csvpath "c:\mycsv.csv" -Newserver "server2"