如何用PowerShell批量复制指定类型文件到上级目录并删除原文件夹
问题原因
你原命令将复制目标路径固定为.(即执行命令时的当前根目录),所有匹配到的txt文件都会被复制到最外层目录,无法对应到每个txt所属data文件夹的上级目录,也没有配置删除原data文件夹的逻辑。
可行解决方案
执行以下PowerShell命令即可实现预期目录结构:
# 第一步:递归查找所有data文件夹下的txt文件,复制到对应data文件夹的上级目录 Get-ChildItem -Path '.' -Recurse -Filter "*.txt" -File | Where-Object { $_.Directory.Name -eq 'data' } | ForEach-Object { $targetDir = $_.Directory.Parent.FullName Copy-Item -Path $_.FullName -Destination $targetDir -Force } # 第二步:所有文件复制完成后,递归删除所有原data文件夹 Get-ChildItem -Path '.' -Recurse -Directory -Filter "data" | Remove-Item -Recurse -Force
参数说明
- 增加
-File参数仅匹配txt格式文件,避免把同名文件夹误作为处理对象 - 增加
Where-Object判断逻辑,仅处理存放在data文件夹下的txt,不会误操作其他路径下的txt文件 Copy-Item后的-Force参数代表目标路径存在同名文件时直接覆盖,不需要覆盖可删除该参数- 先复制再删除的逻辑,可以避免移动过程出错导致源文件丢失
- 如果不需要保留复制过程、想直接移动文件,可以把复制步骤替换为
Move-Item,删除data文件夹时去掉-Recurse即可:Get-ChildItem -Path '.' -Recurse -Filter "*.txt" -File | Where-Object { $_.Directory.Name -eq 'data' } | ForEach-Object { Move-Item -Path $_.FullName -Destination $_.Directory.Parent.FullName -Force } Get-ChildItem -Path '.' -Recurse -Directory -Filter "data" | Remove-Item -Force
内容的提问来源于stack exchange,提问作者ashspenzr
相关产品推荐
相关产品推荐

