PowerShell使用xcopy,robocopy或copy-item

时间:2014-12-05 21:10:04

标签: powershell xcopy copy-item

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

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

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

1 个答案:

答案 0 :(得分:8)

主要优点是您可以通过管道而不是字符串或文件规范将对象发送到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 -Include Remove-Item错误导致这种情况。

您还可以获得PowerShell的错误捕获,-Passthru-WhatIf-UseTransaction等特殊参数以及所有常见参数。 Copy-Item -Recurse可以复制一些xcopy的树复制功能,但它很简陋。

现在,如果您需要维护ACL,所有权,审核等,那么xcopyrobocopy可能会更容易,因为内置了该功能.I'我不确定Copy-Item如何处理将加密文件复制到非加密位置(xcopy有能力执行此操作),我不相信Copy-Item支持直接管理存档属性。

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