PowerShell脚本问题:将今日修改子文件夹的TXT文件移至根目录
PowerShell脚本修正方案
原脚本问题点
- 误用
Copy-Item,需求是移动文件,应该用Move-Item - 未过滤
.txt文件,会遍历所有文件和文件夹 $Today计算逻辑错误,无法精准匹配今日修改的文件- 缺少同名文件检查及终止逻辑
Copy-Item参数错误,应指定-Destination而非-Path
修正后的脚本
# 定义源路径和目标路径 $SrcPath = "H:\FOLDERS\" $DestPath = "H:\FOLDERS" # 获取今日零点和明日零点,精准匹配今日修改的文件 $todayStart = (Get-Date).Date $todayEnd = $todayStart.AddDays(1) # 递归查找子文件夹中今日修改的.txt文件(仅选文件) $targetFiles = Get-ChildItem -Recurse -Path $SrcPath -File -Filter "*.txt" | Where-Object { $_.LastWriteTime -ge $todayStart -and $_.LastWriteTime -lt $todayEnd } # 检查目标目录是否有同名文件,存在则终止 foreach ($file in $targetFiles) { $destFilePath = Join-Path -Path $DestPath -ChildPath $file.Name if (Test-Path -Path $destFilePath) { Write-Error "目标目录已存在同名文件:$($file.Name),终止移动操作" exit 1 } } # 执行移动操作 if ($targetFiles.Count -gt 0) { $targetFiles | Move-Item -Destination $DestPath -Verbose } else { Write-Host "未找到符合条件的.txt文件" }
关键说明
- 用
(Get-Date).Date获取今日零点,结合明日零点的时间范围,确保只筛选今日修改的文件 -File和-Filter "*.txt"精准定位目标文件类型,避免误处理文件夹或其他格式文件- 先遍历检查所有待移动文件的目标路径,只要有一个同名文件就终止脚本,避免部分移动后报错
-Verbose参数会显示每一步的移动详情,方便排查问题
内容的提问来源于stack exchange,提问作者Henrik Rosqvist
相关产品推荐
相关产品推荐

