【问题标题】:Get-ChildItem and Copy-Item explanationGet-ChildItem 和 Copy-Item 说明
【发布时间】:2014-03-12 02:23:14
【问题描述】:

为什么

gci $from -Recurse | copy-item -Destination  $to -Recurse -Force -Container

行为方式不同

copy-item $from $to -Recurse -Force

?

我认为它应该是一样的,但不知何故它不是。为什么?

【问题讨论】:

标签: powershell get-childitem copy-item


【解决方案1】:

您不是循环遍历文件/文件夹集合中的每个项目,而是将最后一个值传递给管道。您需要使用 Foreach-item 或 % 到 Copy-Item 命令。从那里开始,您也不需要第二个 -recurse 开关,因为您已经拥有 GCI 中的每个项目。

试试这个:

gci $from -Recurse | % {copy-item -Path $_ -Destination  $to -Force -Container }

【讨论】:

  • 不应该gci $from -Recurse 从目录中获取所有文件并通过管道传输
  • 复制项不是缺少$_ 吗?这不是在 PS 5.0 中为我运行的实际命令是:gci $from -Recurse | % { copy-item $_ -Destination $to -Force }
  • 你是正确的 kumar_harsh ,我在原始答案中忽略了 $_ 。我做了这个轻微的修改。
【解决方案2】:

这对我有用

Get-ChildItem -Path .\ -Recurse -Include *.txt | %{Join-Path -Path $_.Directory -ChildPath $_.Name } | Copy-Item -Destination $to

【讨论】:

  • 不需要Join-Path,在Copy-Item中使用$_.FullName
【解决方案3】:

开关错了。它们应该是:

gci -Path $from -Recurse | copy-item -Destination  $to -Force -Container

【讨论】:

    【解决方案4】:

    要循环所有项目,这应该可以:

    gci -Path $from -Recurse | % { $_ | copy-item -Destination  $to -Force -Container}
    

    只需执行 foreach 并再次管道每个项目。

    【讨论】:

      【解决方案5】:

      这对我有用:

      Get-ChildItem 'c:\source\' -Recurse | % {Copy-Item -Path $_.FullName -Destination 'd:\Dest\' -Force -Container }
      

      【讨论】:

      • 请解释为什么这会回答这个问题。
      • 也许它并不直接,但可能对那些希望更多地了解您可以通过不同方式实现相同结果的各种方式的人有所帮助。
      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多