如何在PowerShell中递归复制目录内容并保留子目录结构?
PowerShell递归复制目录内容并保留子目录结构的正确语法
你遇到的问题是:直接通过Get-ChildItem管道到Copy-Item会扁平化所有文件,丢失子目录结构——子目录里的文件会被直接复制到目标根目录,而非保留原有的层级。
最简便的解决方案
直接使用Copy-Item的-Recurse参数,同时指定源目录下的所有内容(而非目录本身):
Copy-Item -Path "sourcefoldername\*" -Destination "C:\Users\username\destinationfoldername\" -Recurse
这个命令会将sourcefoldername下的所有文件和子目录完整复制到目标目录,严格保留原有的子目录结构,且不会复制sourcefoldername目录本身。
原命令无效的原因
原命令Get-ChildItem -Path "sourcefoldername" -Recurse会递归列出源目录下的所有文件(包括子目录中的文件),然后逐个传递给Copy-Item。由于没有指定对应子目录的目标路径,所有文件都会被复制到目标目录的根节点,自然丢失了层级结构。
灵活处理场景(如过滤文件)
如果需要对文件进行过滤或自定义处理,可以通过ForEach-Object构建目标路径:
Get-ChildItem -Path "sourcefoldername" -Recurse | ForEach-Object { # 将源路径替换为目标路径,保留层级 $targetPath = $_.FullName.Replace((Resolve-Path "sourcefoldername").Path, "C:\Users\username\destinationfoldername") Copy-Item -Path $_.FullName -Destination $targetPath -Force }
这种方式可以在复制前添加过滤逻辑(比如用Where-Object筛选特定扩展名),同时确保子目录结构完整。
内容的提问来源于stack exchange,提问作者CodeMed
相关产品推荐
相关产品推荐

