如何用PowerShell按扩展名批量复制不同目录下的文件到同一文件夹?
PowerShell批量复制分散子目录下的XML文件
直接使用Copy-Item(最简洁高效)
PowerShell支持在路径中使用通配符,直接用以下命令即可实现类Unix中cp /parent/*/result/*.xml /outputdirectory/的效果:
Copy-Item -Path "/parent/*/result/*.xml" -Destination "/outputdirectory/"
- 默认
-Recurse参数为$false,只会复制匹配到的目标文件,不会连带复制目录结构 - 若之前使用
Copy-Item报错,大概率是误用了-Recurse参数(会递归复制整个目录树而非单个文件),或是路径格式不符合当前环境要求(Windows环境建议用反斜杠\,类Unix环境用正斜杠/)
更灵活的管道写法(适配额外处理场景)
如果需要对文件做过滤、重命名等额外操作,可先通过Get-ChildItem定位目标文件,再管道传递给Copy-Item:
Get-ChildItem -Path "/parent/*/result/*.xml" -File | Copy-Item -Destination "/outputdirectory/"
-File参数确保只选中文件,避免误操作目录- 若存在重名文件,可通过脚本块动态修改目标文件名防止覆盖:
该命令会给文件名加上对应机器名前缀(例如生成Get-ChildItem -Path "/parent/*/result/*.xml" -File | Copy-Item -Destination { "/outputdirectory/$($_.Directory.Parent.Name)_$($_.Name)" }hostname001_hostname001.xml)
内容的提问来源于stack exchange,提问作者Julian Delphiki
相关产品推荐
相关产品推荐

