0

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

该目录类似于:

\\server\folder\username

我正在尝试的代码:

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

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

4

1 回答 1

0

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

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

使用文件夹结构复制(未经测试):

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"
于 2013-01-30T20:55:24.993 回答