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

如何用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

设置定时任务

  1. 打开任务计划程序(Windows搜索栏输入「任务计划程序」)
  2. 点击「创建任务」:
    • 常规标签:给任务起个名字,比如「定时保存临时图片」,勾选「不管用户是否登录都要运行」
    • 触发器标签:点击「新建」,选择「按预定计划」,设置每20分钟重复一次
    • 操作标签:点击「新建」,操作选择「启动程序」,程序/脚本填powershell.exe,添加参数填-ExecutionPolicy Bypass -File "C:\Scripts\CopyNewImages.ps1"(替换成你的脚本路径)
  3. 点击「确定」完成设置

这样脚本就会每20分钟自动运行,只复制新增的图片到目标文件夹,完美解决临时图片被自动删除的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:51