在网络上移动文件夹

在网络上移动文件夹

我需要使用 Powershell 将文件夹从一个网络文件夹移动(而不是复制然后删除,为了进行文件验证)到另一个网络文件夹。

我已经尝试过Move-Itemtest1文件夹在哪里):

PS C:\Users\user\Documents> Move-Item test1 \\SomeServer\c$\some_folder\
Move-Item : Source and destination path must have identical roots. Move will not work across volumes.
At line:1 char:10
+ Move-Item <<<<  test1 \\SomeServer\c$\some_folder\
    + CategoryInfo          : WriteError: (C:\Users\user\Documents\test1:DirectoryInfo) [Move-Item], IOExce
   ption
    + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

我是不是漏掉了一些简单的东西?有没有简单的方法可以做到这一点?

我确实尝试过robocopy

robocopy /MOVE test1 \\SomeServer\c$\some_folder\

这种方法部分奏效了,但丢失了test1文件夹(意味着test没有出现在 上some_folder),只有该文件夹中的文件出现在\\SomeServer\c$\some_folder\

结果看起来应该是这样的:

工作目录(移动前):

  • test1(包含文件的文件夹)
  • test2(包含文件的文件夹)
  • test3(包含文件的文件夹)
  • 文件.txt

工作目录(移动后):

  • test2(包含文件的文件夹)
  • test3(包含文件的文件夹)
  • 文件.txt

\\SomeServer\c$\some_folder\(移动后预期):

  • test1(包含文件的文件夹)

问题是,当我使用 robocopy 时,结果显示files in it在结果中但没有test1文件夹......

我已尝试使用 /s 和 /move 来复制 robocopy,但仍然没有成功。

我发现了类似的东西:

set folder="test1"

robocopy /MOVE "%folder%" "\\SomeServer\c$\some_folder\%folder%" 

几乎可以工作,但是文件夹元数据(修改/创建日期)丢失了,需要保留。

答案1

以下是使用 Robocopy 移动整个文件夹( )复制到不同服务器上的test1另一个文件夹( ),同时保留日期戳等:some_folder

ROBOCOPY "test1" "\\SomeServer\c$\some_folder\test1" /MOVE /COPY:DAT /DCOPY:T

根据ROBOCOPY /?使用信息:

/COPY:copyflag[s] :: 要复制的文件内容(默认为 /COPY:DAT)。
                      (复制标志:D=数据、A=属性、T=时间戳)。
                      (S=安全=NTFS ACL,O=所有者信息,U=审核信息)。

/DCOPY:T :: 复制目录时间戳。

答案2

尝试使用 PowerShell 3 - 我认为 Move-Item 的一些限制已被消除。

以下 PowerShell 脚本将Copy-Item在 且compare-objectRemove-Item当 相等 时执行:

$source = "<UNC Path>"
$destination = "<UNC Path>"

if (test-path $destination -PathType Container) 
{
  foreach ( $srcObj in (get-childitem $source )) 
  { 
    $srcObjPath = "$($srcObj.fullname)"
    $destObjPath = "$($destination)\$($srcObj.name)" 
    If((Test-Path -LiteralPath $destination)) 
     {
       copy-item $srcObjPath $destination -recurse
       if ( (Test-Path -Path $destObjPath ) -eq $true)
       {
        if ( (compare-object (gci $srcObjPath -recurse) (gci $destObjPath -recurse)) -eq $null)
        {
         write-output "Compare is good. Remove $($srcObjPath)"
         remove-item $srcObjPath -recurse
        }
        else
        {
          write-output "Compare is bad. Remove $($destObjPath)"
          remove-item $destObjPath -recurse
         }
       }
       else 
       { 
        write-output "$($destination) path is bad" 
       }
     }
  else
  {
    write-output "bad destinaton: $($destination)"
  }
 }
}

(来源)

答案3

我在这里有点新,但是...使用 Robocopy 复制内容使用如下语法:

robocopy \\source_host\source_dir \\dest_host\dest_dir * 

其中,*(表示全部)或要复制的文件列表。

就我个人而言,我无法使用 robocopy 这种“直接方式”(源/目标)复制目录。只能使用参数/MIR

答案4

我要做的是在同一脚本中映射网络位置并执行“驱动器”,然后在最后断开连接。我还会简单地使用MOVE命令

例如

NET USE S: \\networkLocation\c$\newDir
MOVE "C:\user\desktop\working dir\test1" S:
NET USE S: /DELETE

相关内容