【问题标题】:Powershell is copying a folder's contents, but neglecting to copy the folderPowershell 正在复制文件夹的内容,但忽略了复制文件夹
【发布时间】:2020-07-09 21:57:10
【问题描述】:

我的文件结构类似于:

OldLocation/A、OldLocation/B、OldLocation/C 和 OldLocation/D

我想将文件夹 A、B 和 D 移动到 NewLocation(连同它们的内容)。我有以下代码:

    $Copyfiles = Get-ChildItem -Path $folder -Directory -Exclude 'C'



foreach ($item in $Copyfiles)
{

Copy-Item -Path $item -Recurse -Force -Destination $Dest
}

我想要的目标是最终得到 NewLocation/A/A 的东西,NewLocation/B/B 的东西,NewLocation/D/D 的东西

它似乎几乎可以工作,唯一的挂断是由于某种原因它只复制文件夹 A 的内容,而不是文件夹本身。因此我得到了 NewLocation/A 的东西,NewLocation/B/B 的东西,以及 NewLocation/D/D 的东西

我该如何解决这个问题?

【问题讨论】:

  • Get-ChildItem 获取文件夹的内容,而不是文件夹本身。你是这个意思吗?你能发布你的实际代码吗? $Dest 看起来并没有改变,所以我认为你可以这样做 Copy-Item -Path $folder -Recurse -Force -Destination $Dest }
  • @NekoMusume: -Directory 使Get-ChildItem 自己获取目录(文件夹)。
  • @mklement0 那么Get-ChildItem 发生在哪里? \Oldlocation?在那种情况下,你为什么需要-recurse?他们都去同一个目的地吗?为什么他们不包括C
  • 哎呀,我只是个白痴......我现在明白了

标签: powershell


【解决方案1】:

确保目标目录存在事先因为Copy-Item在复制整个目录时的行为不同,具体取决于目标目录是否存在是否已经存在:

  • 如果它存在,则源目录的内容被复制到按需创建的目标目录中。

  • 如果它确实存在,则将源目录作为一个整体复制到目标目录作为子目录

有关背景信息,请参阅this answer


您可以使用以下命令确保目标目录$Dest 存在,使用New-Item-Force 开关进行desired-state 逻辑:它将创建目标目录on demand(并返回一个 System.IO.DirectoryInfo 实例,描述新创建的或预先存在的目录)。

$null = New-Item -Type Directory -Force $Dest

【讨论】:

  • @Andy:是的,尽管我建议为期望状态逻辑添加-Force:它将创建目标目录。 按需 - 请查看我的更新。
猜你喜欢
  • 2019-10-04
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多