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

如何使用PowerShell脚本从子文件夹复制指定类型文件且不保留目录结构

PowerShell 复制指定格式文件不保留层级结构调整方案

原脚本问题原因

原脚本逻辑为遍历所有子目录后对目录执行带-Recurse参数的Copy-Item操作,该操作默认会保留源文件对应的目录层级,因此会在目标路径生成多余文件夹。

优化后脚本

直接递归检索所有符合要求的.txt文件,再统一复制到目标目录即可,无需保留层级结构:

# 写法1:分步写法便于调试
# 递归检索S:\other下所有后缀为txt的文件
$allTxtFiles = Get-ChildItem -Path "S:\other" -Filter "*.txt" -Recurse -File
# 逐个复制到目标目录
foreach ($file in $allTxtFiles) {
    Copy-Item -Path $file.FullName -Destination "D:\FinishFolder\"
}

# 写法2:管道简写,逻辑完全一致
Get-ChildItem -Path "S:\other" -Filter "*.txt" -Recurse -File | Copy-Item -Destination "D:\FinishFolder\"

可选参数说明

  • 若目标目录存在同名文件需要直接覆盖,可在Copy-Item命令后添加-Force参数
  • 若需要避免同名文件覆盖,可在复制前判断目标路径是否存在该文件,自动重命名后再复制,示例如下:
$targetPath = "D:\FinishFolder\"
Get-ChildItem -Path "S:\other" -Filter "*.txt" -Recurse -File | ForEach-Object {
    $newFileName = $_.Name
    $index = 1
    # 循环判断是否存在重名文件,存在则加序号
    while (Test-Path (Join-Path $targetPath $newFileName)) {
        $newFileName = "{0}_{1}{2}" -f $_.BaseName, $index, $_.Extension
        $index++
    }
    Copy-Item -Path $_.FullName -Destination (Join-Path $targetPath $newFileName)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:18:02