Powershell递归复制项目,但不包含文件夹名称


20

这是一个愚蠢的问题,但我不知道为什么它不起作用。

我试图将文件从FolderA递归复制到FolderB。我正在这样做:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

效果很好,没问题。

除了FolderB中的结果是这样的:

C:\FolderB\FolderA\file.txt

而我希望它是:

C:\FolderB\file.txt

我错过了什么愚蠢的显而易见的事情?


4
您没有做任何愚蠢的事情,复制项目只是PITA。
StingyJack

Answers:


28

您的命令告诉PowerShell将文件夹本身及其所有内容复制到目标文件夹。要仅复制原始文件夹的内容,请按以下步骤更改路径:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

请注意文件夹名称后的星号(*)。这会将文件夹的内容(包括子文件夹)复制,但不将文件夹本身复制到目标文件夹。

使用复制项Cmdlet


2
请注意,如果目标文件夹不存在,这不会复制文件夹结构。md "C:\FolderB"之前致电Copy-Item似乎可以避免此问题。
zett42

以上面的@ zett42的注释为基础,如果目标文件夹尚不存在,则似乎Copy-Item将重现文件夹结构,但是向下一级C:\FolderA\B\C复制(例如,复制到C:\FolderB\C而不是C:\FolderB\B\C),并且在存在多个子文件夹时也可能失败。始终在调用Copy-Item之前确保目标文件夹存在。这闻起来像个错误(我看不出有什么理由希望这种不一致的行为)。
Marc Durdin

1
另请参见对SO的评论
Marc Durdin

0

您可以使用-File -Recurse递归地仅复制文件:

复制项-路径“ C:\ Source”-目标“ C:\ Dest”-文件-递归-强制-详细

或使用-Directory -Recurse仅复制empy文件夹结构:

复制项-路径“ C:\ Source”-目标“ C:\ Dest”-目录-递归-强制-详细

亲切的问候,

保罗·佩德罗扎


-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

也可以。


1
这似乎是对FastEthernet类似答案的评论。如果要提出替代答案,则应解释为什么它可以回答问题。
Blackwood

如果C:\ FolderB不存在,则会创建C:\ FolderB;但如果C:\ FolderB存在,则会创建C:\ FolderB \ FolderA。如果您两次运行该命令,则可以在略有不同的位置获得所有内容的两个副本!多么痛。
Lamarth '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.