Powershell移动31天以上文件遇重名自动重命名功能实现求助
PowerShell 旧文件移动脚本解决方案
完整可运行代码
Start-Transcript -Path "D:\LOG\LOG_OLDFILES.txt" -Append # 预创建目标目录避免不存在报错 $targetDir = "D:\temp\temp_backup" if (-not (Test-Path $targetDir)) { New-Item -ItemType Directory -Path $targetDir -Force | Out-Null } Get-ChildItem -Verbose -Path "D:\DATASOURCE" -File -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-31)} | ForEach-Object { $targetFilePath = Join-Path $targetDir $_.Name # 检测目标路径是否存在同名文件 if (Test-Path $targetFilePath) { # 生成精确到秒的时间戳,避免重名冲突,可按需增加毫秒位调整精度 $timeStamp = Get-Date -Format "yyyyMMddHHmmss" $newFileName = "{0}_{1}{2}" -f $_.BaseName, $timeStamp, $_.Extension $targetFilePath = Join-Path $targetDir $newFileName } Move-Item -Path $_.FullName -Destination $targetFilePath -Verbose } Stop-Transcript
逻辑说明
- 新增目标目录存在性校验,避免目标目录未提前创建导致的移动失败
- 将原直接管道传递给
Move-Item的逻辑改为逐文件遍历处理,单独实现重命名规则:- 先拼接默认目标路径,判断是否存在同名文件
- 存在同名文件时,自动按要求将待移动文件重命名为
原文件名_时间戳格式,保留原始扩展名 - 时间戳格式可根据实际需求调整,如需更高防冲突精度可将格式改为
yyyyMMddHHmmssfff增加毫秒位
- 所有操作日志会完整保留在指定的转录日志文件中
内容的提问来源于stack exchange,提问作者rzhell
相关产品推荐
相关产品推荐

