嗨,我正在努力解决以下问题 - 假设我有以下目录结构 C:\Temp\Test1 和 C:\Temp\Test2
我想做的是将 C:\Temp\Test1 的子内容递归复制到 C:\Temp\Test2 而不复制实际文件夹 C:\Temp\Test1 ..如果我现在使用命令
Copy-Item C:\Temp\Test1 C:\Temp\Test2 -Recurse
将导致 C:\Temp\Test2\Test1 并且参数组合似乎无法缓解该问题
同样,当我希望删除 C:\Temp\Test2 中的所有子内容时,我希望仅删除子内容而不是实际文件夹,例如
Remove-Item C:\Temp\Test2\ -Recurse
正在删除 \Test2 文件夹。我尝试了很多参数变化 - 我怎样才能完成我想要做的事情?
看一下 get-childitem 命令。您可以在管道中使用它来复制或删除根文件夹下的所有项目:
# recursively copy everything under C:\Temp\Test1 to C:\Temp\Test2
get-childitem "C:\Temp\Test1" | % {
copy-item $_.FullName -destination "C:\Temp\Test2\$_" -recurse
}
# recursively remove everything under C:\Temp\Test1
get-childitem "C:\Temp\Test1" -recurse | % {
remove-item $_.FullName -recurse
}
Copy-Item C:\Temp\Test1\* C:\Temp\Test2
Remove-Item "C:\Temp\Test2\*" -recurse
也有效:)
正如 @edelwater 的评论中提到的,在 SuperUser 上有一个简单而正确的答案,我将在这里重现:
Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose
关键是在源路径末尾添加
*
。
假设
FolderA
和 FolderB
都是当前目录中的文件夹,并且 FolderA
包含以下内容:
|-- File1.txt
|-- Subdirectory1
| |-- File2.txt
| |-- File3.txt
|-- Subdirectory2
|-- File4.txt
然后是以下内容:
$MySource = "FolderA"
$MyDest = "FolderB"
Copy-Item `
-Path (Join-Path $MySource "*") `
-Destination $MyDest `
-Recurse `
-Force
在
FolderB
内创建此结构
|-- File1.txt
|-- Subdirectory1
| |-- File2.txt
| |-- File3.txt
|-- Subdirectory2
|-- File4.txt
如果源文件夹路径中没有
*
,您最终会得到:
|-- FolderA
|-- File1.txt
|-- Subdirectory1
| |-- File2.txt
| |-- File3.txt
|-- Subdirectory2
|-- File4.txt