如何用PowerShell仅将临时文件夹中的新图片复制到目标文件夹
解决PowerShell定时复制临时文件夹新图片的方案
没问题,我帮你搞定这个需求!下面是一套完整的解决方案,包括脚本实现和定时任务配置,确保只复制新文件,每20分钟自动运行。
核心思路
我们需要实现两个关键功能:
- 仅复制新文件:避免重复复制已经保存过的图片,同时确保临时文件夹中新增的图片被及时同步
- 定时自动运行:通过Windows任务计划器让脚本每20分钟执行一次
完整PowerShell脚本
# 配置路径(根据你的实际情况修改) $tempImageFolder = "C:\Users\YourUsername\AppData\Local\Temp\ImageDownloads" # 临时图片文件夹 $targetFolder = "D:\SavedImages" # 目标保存文件夹 $lastRunLog = "C:\Scripts\LastImageCopyLog.txt" # 记录上次运行时间的日志文件 # 创建目标文件夹和日志文件目录(如果不存在) if (-not (Test-Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null } $logDir = Split-Path $lastRunLog -Parent if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null } # 获取上次运行时间,首次运行则设为当前时间减20分钟 if (Test-Path $lastRunLog) { $lastRunTime = Get-Content $lastRunLog | Get-Date } else { $lastRunTime = (Get-Date).AddMinutes(-20) $lastRunTime.ToString("yyyy-MM-dd HH:mm:ss") | Out-File $lastRunLog } # 获取临时文件夹中在最后一次运行后新增的图片文件 $imageFiles = Get-ChildItem -Path $tempImageFolder -File -Include "*.jpg", "*.png", "*.gif", "*.bmp" | Where-Object { $_.LastWriteTime -gt $lastRunTime } # 复制新文件到目标文件夹 if ($imageFiles.Count -gt 0) { Write-Host "发现 $($imageFiles.Count) 个新图片,开始复制..." foreach ($file in $imageFiles) { try { Copy-Item -Path $file.FullName -Destination $targetFolder -Force -ErrorAction Stop Write-Host "已复制: $($file.Name)" } catch { Write-Warning "复制 $($file.Name) 失败: $_" } } } else { Write-Host "没有发现新图片" } # 更新上次运行时间日志 (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") | Out-File $lastRunLog
脚本解释
- 路径配置:开头的三个变量请根据你的实际文件夹路径修改
- 日志文件:用一个文本文件记录上次脚本运行的时间,以此作为判断“新文件”的依据(只复制上次运行后新增的图片)
- 文件筛选:通过
Get-ChildItem筛选常见图片格式,并用LastWriteTime判断是否为新增文件 - 容错处理:添加了基本的错误捕获,避免单个文件复制失败导致整个脚本终止
替代方案:用Robocopy简化操作
如果你觉得上面的脚本太繁琐,可以直接用Windows自带的robocopy命令,它天生支持只复制新文件,效率更高:
$source = "C:\Users\YourUsername\AppData\Local\Temp\ImageDownloads" $dest = "D:\SavedImages" # /XO: 只复制比目标文件夹中文件新的,或者目标中不存在的文件 # /E: 复制子文件夹(包括空文件夹) # /COPYALL: 复制所有文件属性(包括权限、时间戳等) # /R:3 /W:5: 复制失败时重试3次,每次间隔5秒 robocopy $source $dest *.jpg *.png *.gif *.bmp /XO /E /COPYALL /R:3 /W:5
设置定时任务
- 打开任务计划程序(Windows搜索栏输入「任务计划程序」)
- 点击「创建任务」:
- 常规标签:给任务起个名字,比如「定时保存临时图片」,勾选「不管用户是否登录都要运行」
- 触发器标签:点击「新建」,选择「按预定计划」,设置每20分钟重复一次
- 操作标签:点击「新建」,操作选择「启动程序」,程序/脚本填
powershell.exe,添加参数填-ExecutionPolicy Bypass -File "C:\Scripts\CopyNewImages.ps1"(替换成你的脚本路径)
- 点击「确定」完成设置
这样脚本就会每20分钟自动运行,只复制新增的图片到目标文件夹,完美解决临时图片被自动删除的问题!
内容的提问来源于stack exchange,提问作者RayD
相关产品推荐
相关产品推荐

