You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本复制指定文件类型失效,如何仅复制.dat与.py文件并保留目录结构?

修复PowerShell脚本仅复制指定类型文件并保留空文件夹

这个问题其实是PowerShell中Copy-Item的-Include参数在管道场景下的常见陷阱——我来帮你拆解并修复:

问题根源

当你把Get-ChildItem的结果管道到Copy-Item时,-Include参数只会过滤管道传递过来的顶层项,而不会作用于递归过程中遍历到的子目录文件。所以你的脚本虽然加了-Include,但只是过滤了源目录下的顶层文件/目录,子目录里的所有文件还是会被完整复制。

解决方案1:直接使用Copy-Item(更简洁)

不需要先调用Get-ChildItem,直接给Copy-Item指定源路径为$sourceDir\*,这样-Include就能正确作用于所有递归的文件:

$sourceDir = "C:\User\001"
$targetDir = "C:\User\002"
Copy-Item -Path "$sourceDir\*" -Destination $targetDir -Recurse -Include '*.dat', '*.py' -Container

关键说明:

  • $sourceDir\*表示匹配源目录下的所有内容(文件和目录),这是让-Include在递归场景生效的关键
  • -Container参数确保空文件夹会被完整复制到目标目录
  • -Recurse配合-Include会自动遍历所有子目录,只复制符合后缀的文件

解决方案2:分步骤复制目录和文件(更灵活)

如果需要更精细的控制,可以先单独复制所有目录结构(包括空文件夹),再复制指定类型的文件:

$sourceDir = "C:\User\001"
$targetDir = "C:\User\002"

# 第一步:复制所有目录结构(保留空文件夹)
Get-ChildItem -Path $sourceDir -Directory -Recurse | 
    Copy-Item -Destination { Join-Path $targetDir $_.FullName.Substring($sourceDir.Length) } -Container

# 第二步:仅复制指定类型的文件
Get-ChildItem -Path $sourceDir -File -Recurse -Include '*.dat', '*.py' | 
    Copy-Item -Destination { Join-Path $targetDir $_.FullName.Substring($sourceDir.Length) }

关键说明:

  • -Directory参数只获取目录,确保完整复制源目录的层级结构(包括空目录)
  • -File参数配合-Include精准筛选需要复制的文件类型
  • 用脚本块{ Join-Path ... }动态计算每个项在目标目录的对应路径,保证结构一致

内容的提问来源于stack exchange,提问作者Chipmunk_da

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:18:01