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

如何使用PowerShell搜索文件并保留文件夹结构复制到新位置

PowerShell实现带时间过滤的文件移动并保留原目录结构

在PowerShell中,用Get-ChildItem搜索指定文件后,直接搭配Copy-Item或Move-Item,默认会把符合条件的文件全部复制/移动到目标路径的根目录下,不会保留原有的文件夹层级。如果这是你要的效果自然没问题,但如果需要在目标位置完整复刻源文件的目录结构,下面是拆分后的示例代码,每部分都做了注释,方便复用修改。

我的需求场景:将网络共享路径中,创建或修改时间不超过3小时的文件移动到本地D盘,同时严格保留原文件夹结构。我知道很多人会推荐RoboCopy——我也用它完成过不少任务,确实好用,但这次就是想用PowerShell实现,尤其是在设置3小时这种精细时间限制时遇到了卡点。


步骤拆解与代码实现

  1. 定义基础参数
# 源路径(网络共享路径)
$sourcePath = "\\server\share"
# 目标路径(本地D盘)
$targetPath = "D:\Target"
# 计算时间阈值:当前时间往前推3小时
$timeThreshold = (Get-Date).AddHours(-3)
  1. 遍历符合时间条件的文件
# 递归搜索源路径中,创建时间或修改时间晚于阈值的文件
$filesToMove = Get-ChildItem -Path $sourcePath -Recurse -File | Where-Object {
    $_.CreationTime -ge $timeThreshold -or $_.LastWriteTime -ge $timeThreshold
}
  1. 循环处理每个文件,保留目录结构并移动
foreach ($file in $filesToMove) {
    # 构建目标文件的相对路径,去掉源路径的根部分
    $relativePath = $file.FullName.Substring($sourcePath.Length)
    # 拼接目标文件的完整路径
    $destinationFile = Join-Path -Path $targetPath -ChildPath $relativePath
    # 确保目标文件夹存在,不存在则创建
    $destinationFolder = Split-Path -Path $destinationFile -Parent
    if (-not (Test-Path -Path $destinationFolder)) {
        New-Item -ItemType Directory -Path $destinationFolder -Force | Out-Null
    }
    # 移动文件(如果要复制,替换为Copy-Item)
    Move-Item -Path $file.FullName -Destination $destinationFile -Force
}

代码说明

  • 参数部分:把源路径、目标路径和时间阈值单独提取,方便后续修改调整;
  • 文件筛选:通过Where-Object同时判断创建时间和修改时间,确保符合任一条件的文件都被选中;
  • 目录结构保留:通过截取文件的相对路径,在目标路径下重建相同的文件夹层级,避免文件全部堆积到根目录;
  • 文件夹预创建:移动前先检查目标文件夹是否存在,不存在则自动创建,避免因目录缺失导致移动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:53:14