15

从批处理文件切换到 powershell 脚本的原因是为了改进进程的错误检查。用于复制的 cmdlet 在这方面有优势吗?

如果已经存在使用 xcopy 按文件名单独复制文件的批处理文件,将语法转换为复制项有什么好处吗?

使用 robocopy、xcopy 和 copy-item 有什么优势(相互比较)?例如,robocopy 在通过可靠网络处理大量小文件时是否具有优势。如果这个脚本要在数百台计算机上同时运行以将数百个文件复制到每个计算机上,这会影响决策吗?决定是否应该主要集中在文件的权限上?

4

1 回答 1

9

主要优点是您可以Copy-Item通过管道而不是字符串或文件规范发送对象。所以你可以这样做:

Get-ChildItem '\\fileserver\photos\*.jpeg' -File | `
  Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | `
  Copy-Item -Destination '\\webserver\photos\'

这是一个糟糕的例子(你可以用 来做到这一点Copy-Item -Filter),但它很容易即时提出。在处理文件Get-ChildItem-Recurse -IncludeRemove-Item.

您还可以获得 PowerShell 的错误捕获、特殊参数(如-Passthru-WhatIf-UseTransaction)以及所有常用参数。 Copy-Item -Recurse可以复制 xcopy 的一些树复制能力,但它非常简单。

现在,如果您需要维护 ACL、所有权、审计等,那么xcopy或者robocopy可能会更容易,因为该功能是内置的。我不确定如何Copy-Item处理将加密文件复制到非加密位置(xcopy有一些能力做到这一点),我不相信Copy-Item支持直接管理存档属性。

如果您正在寻找速度,那么我怀疑 xcopy 和 robocopy 会胜出。托管代码通常具有更高的开销。Xcopy 和 robocopy 还可以更好地控制它们与网络的工作情况。

于 2014-12-05T21:54:43.403 回答