我希望使用Copy-Item
将整个文件夹复制到另一个文件夹。
我的源文件夹c:\base
包含一些文件:
├───base
│ file1.txt
│ file2.txt
我使用以下命令:
Copy-Item c:\base c:\target -recurse
如果目标文件夹(c:\target
)存在,该命令将完全按照我的要求复制源文件夹:
├───target
│ └───base
│ file1.txt
│ file2.txt
如果目标文件夹不存在,该命令会创建目标文件夹(完全按照我的意愿),但现在只复制源文件夹的内容(不包含base
文件夹):
├───target
│ file1.txt
│ file2.txt
答案 0 :(得分:9)
这是一个已知的错误(有人会说的功能):
这种行为IMO,是一种艺术品 提供者和对象管道 powershell使用的模型。你有 习惯了这个想法 导航环境有点奇怪 与其他炮弹相比;它的 显而易见,而不是隐含的,因为 文件系统是其中之一 可以使用的上下文。这带来了 随之而来的是一些奇怪的行为 任何给定路径的目标都是 处理组合 powershell的通用语法和 命令本身,而不是存在 完全由命令处理 像command.com/cmd.exe这样的shell。
答案 1 :(得分:0)
是的,这个真的很讨厌。
如果您想获得一致的复制体验,请使用以下模式:
$copyFrom = 'C:\Foo\Bar\TargetDirectoryToCopy'
$destinationPath = 'D:\Bar\Foo\'
$newItemParams = @{
Path = $destinationPath
ItemType = 'Directory'
Force = $True
}
$copyParams = @{
Path = $copyFrom
Destination = $destinationPath
Recurse = $True
Confirm = $false
Force = $True
}
New-Item @newItemParams
Copy-Item @copyParams
目录 D:\Bar\Foo\
将嵌套 TargetDirectoryToCopy
目录。
因此,如果有一个文件 C:\Foo\Bar\TargetDirectoryToCopy\FooBar.txt
,它的副本将与 D:\Bar\Foo\TargetDirectoryToCopy\FooBar.txt
中的任何其他文件一起创建为 C:\Foo\Bar\TargetDirectoryToCopy