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

如何使用Powershell/Node.js从回收站恢复指定或最近删除的文件

PowerShell 回收站文件恢复实现方案

完整可运行代码

function RestoreItems {
    [CmdletBinding()]
    param(
        # 待恢复的原始文件完整路径数组,匹配优先级最高
        [Parameter()]
        [string[]]$Paths,
        # 恢复指定时间段内删除的文件,例:(New-TimeSpan -Minutes 5) 代表最近5分钟
        [Parameter()]
        [TimeSpan]$DeletedWithin,
        # 恢复最近N条删除的条目
        [Parameter()]
        [int]$LastCount
    )

    # 初始化回收站COM对象
    $recycleBin = (New-Object -ComObject Shell.Application).NameSpace(0x0a)
    # 读取所有回收站条目并提取所需属性
    $allItems = $recycleBin.Items() | ForEach-Object {
        [PSCustomObject]@{
            ComItem = $_
            OriginalFullPath = Join-Path -Path $_.ExtendedProperty('System.Recycle.DeletedFrom') -ChildPath $_.Name
            DeletedTimestamp = [DateTime]$_.ExtendedProperty('System.Recycle.DateDeleted')
        }
    }

    # 按规则过滤条目
    $filteredItems = $allItems
    # 优先按指定原始路径过滤
    if ($Paths -and $Paths.Count -gt 0) {
        $filteredItems = $filteredItems | Where-Object { $Paths -contains $_.OriginalFullPath }
    }
    # 按删除时间段过滤
    if ($DeletedWithin -ne $null) {
        $cutoffTime = (Get-Date).Add(-$DeletedWithin)
        $filteredItems = $filteredItems | Where-Object { $_.DeletedTimestamp -ge $cutoffTime }
    }
    # 按删除时间倒序,取最近N条
    if ($LastCount -gt 0) {
        $filteredItems = $filteredItems | Sort-Object -Property DeletedTimestamp -Descending | Select-Object -First $LastCount
    }

    # 执行恢复操作,调用系统原生恢复逻辑,和手动右键恢复效果一致
    foreach ($item in $filteredItems) {
        # 英文系统请将参数改为 'Restore'
        $item.ComItem.InvokeVerb('恢复')
    }

    # 返回恢复成功的条目信息供上层调用
    return $filteredItems | Select-Object OriginalFullPath, DeletedTimestamp
}

使用示例

1. 恢复指定路径的文件

RestoreItems -Paths @('C:\test\1.txt', 'C:\test\2\demo.png')

2. 恢复最近5分钟删除的所有文件

RestoreItems -DeletedWithin (New-TimeSpan -Minutes 5)

3. 恢复最近删除的10条条目

RestoreItems -LastCount 10

4. 组合条件使用(恢复指定路径下最近10分钟删除的文件)

RestoreItems -Paths @('C:\work\doc\report.docx') -DeletedWithin (New-TimeSpan -Minutes 10)

Electron 集成说明

在Electron中可以通过child_process模块调用上述PowerShell脚本,示例代码(Node.js):

const { exec } = require('child_process')

// 示例:恢复最近5分钟删除的文件
const psFunction = `粘贴上面完整的RestoreItems函数内容`
const runCommand = `RestoreItems -DeletedWithin (New-TimeSpan -Minutes 5)`
const fullCommand = `powershell.exe -Command "${psFunction} ${runCommand}".replace(/"/g, '\\"')`

exec(fullCommand, (err, stdout, stderr) => {
    if (err) {
        console.error('恢复失败:', err)
        return
    }
    console.log('恢复成功的条目:', stdout)
})

注意事项

  • 调用系统原生InvokeVerb方法比手动复制文件更稳妥,会自动兼容回收站的原生逻辑,包括跨盘符恢复、目录自动重建、重名冲突系统提示等
  • 不需要管理员权限,仅需当前用户的正常权限即可访问对应账号的回收站数据
  • 过滤规则优先级为:指定路径 > 时间段 > 最近N条,多参数同时传入时会取交集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:42:04