我正在尝试将文件从一个位置复制到另一个位置。我有一个CSV,其中包含目录,名称和其他一些对移动不重要的字段。我很确定我的代码试图移动整个文件夹结构而不仅仅是文件。我怎样才能移动文件? OR 如何将类似的文件夹结构移动到新位置(\ folder \ username)
目录看起来像:
\\server\folder\username
我正在尝试的代码:
Import-Csv c:\movefiles.csv | ForEach-Object {Copy-Item -LiteralPath ($_.Directory + "\" + $_.name) -Destination c:\}
目标实际上是另一台服务器上的位置。
答案 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"