【问题标题】:Why does Powershell v2 Copy-Item seem to be copying a directory instead of individual items?为什么 Powershell v2 Copy-Item 似乎是在复制目录而不是单个项目?
【发布时间】:2025-11-29 06:00:01
【问题描述】:

我是 Powershell 新手,正在运行我认为相当简单的脚本,用于将文件从网络复制到本地计算机。

$htmPath = "\\ServerPath\foo\WebHelp\"
$dstPath = "C:\LocalPath\foo\WebHelp\"
Copy-Item $htmPath $dstPath -recurse -force

但是,我所有的数据都在C:\LocalPath\foo\WebHelp\Webhelp\;看来我的副本正在创建WebHelp 目录的新实例,而不是复制内容。这正常吗?为什么会发生?如何修改我的脚本以仅复制文件夹的内容,而不是文件夹名称?

例如,如果我只想从\\serverpath\foo\WebHelp\files 复制files 而不是\WebHelp\files。我在添加或删除结尾\ 和使用copy 而不是copy-item 的各种迭代中都没有成功。在复制期间消除父文件夹名称附加到路径的正确语法是什么?

【问题讨论】:

  • 不确定每个 powershell... 但在 *NIX 命令中,有时结尾的斜杠会有所不同。你试过“...foo\webhelp”吗?
  • 我做到了,实际上...无论有没有最后的 \,结果都是一样的。

标签: copy powershell-2.0


【解决方案1】:

首先:switch -WhatIf 可以显示您的信息,用于测试复制。

第二:复制目录时无需按文件执行文件。如果你想逐个文件,你可以使用$htmPath\* 来获取子项目。或Get-ChildItem

您可以将您的 dstPath 设置为 "C:\LocalPath\foo\"

【讨论】:

  • 我不想逐个文件,我只想复制目录中的文件,而不是目录。有没有办法抑制它?我一直没有成功。
【解决方案2】:

从一个文件夹复制到另一个文件夹时,您可以使用多种选项来获得不同的结果。

$htmPath = "\\ServerPath\foo\WebHelp\"
$dstPath = "C:\LocalPath\foo\WebHelp\"
Copy-Item $htmPath $dstPath -recurse -force

您的代码明确选择 htm 路径文件夹及其文件/子文件夹以复制到目标路径。

Copy-Item $htmPath\* $dstPath -recurse -force

\* 中的从路径更改为结尾,我相信,将 htm 路径文件和子文件夹复制到目标路径所需的结果。

如果您只想要文件而不是子文件夹,请删除 -recurse

阅读更多关于从一个位置复制到另一个位置的信息here。 Copy-Item 命令信息here.

【讨论】: