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

请求修改PowerShell日志迁移脚本:解决重复创建子目录问题

修复PowerShell日志同步脚本的重复目录创建问题

原脚本的核心问题在于每次运行都会递归复制源目录下的所有子项,即使目标目录已存在,Copy-Item -Recurse -Force的逻辑会强制重复处理目录结构;再加分机子目录因每日新增日志导致最后修改时间更新,进一步加剧了不必要的重复操作。

以下是优化后的脚本,改用Robocopy实现增量镜像同步,同时保留原有的旧文件清理逻辑:

# 设置源目录和目标目录路径
$sourcePath = "D:\3cx"
$destinationPath = "D:\3cxnew"

# 确保目标目录存在
if (-not (Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Path $destinationPath | Out-Null
}

# 使用Robocopy进行增量同步:只复制新增/修改的文件,镜像目录结构,跳过已存在且无变化的项
Robocopy $sourcePath $destinationPath /E /XO /NFL /NDL /NJH /NJS
# 参数说明:
# /E: 复制所有子目录,包括空目录
# /XO: 跳过比目标文件旧的文件(只同步新增或更新的内容)
# /NFL /NDL: 不显示文件/目录列表
# /NJH /NJS: 不显示作业头/摘要信息

Write-Host "文件和目录已从 $sourcePath 同步至 $destinationPath"

# 设置旧文件保留期限(180天前)
$limit = (Get-Date).AddDays(-180)

# 删除源目录中超过保留期限的文件
Get-ChildItem -Path $sourcePath -Recurse -Force | 
    Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } | 
    Remove-Item -Force

# 清理源目录中遗留的空目录(包括嵌套空目录)
Get-ChildItem -Path $sourcePath -Recurse -Force -Directory | 
    Sort-Object FullName -Descending | 
    Where-Object { (Get-ChildItem -Path $_.FullName -Force | Measure-Object).Count -eq 0 } | 
    Remove-Item -Force

关键优化点

  1. 替换复制逻辑:用Robocopy替代Copy-Item,Robocopy是Windows原生的文件同步工具,支持增量同步,只会处理新增或修改的文件/目录,彻底避免重复创建已存在的目录结构。
  2. 优化空目录清理:先按目录路径倒序排序,确保先删除深层空目录,再处理上层目录,避免因子目录未删除导致上层目录无法被识别为空的问题。
  3. 减少冗余操作:通过Robocopy的参数控制输出,让脚本运行更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:14:56