【解决】Windows删除文件提示句柄被占用

前言:经常在删除文件时,提示文件被其他进程占用,导致一直无法删除文件
原文地址:https://www.caoayu.top/article/15518556-8be4-80d8-b1ab-d5981d3c140d

:memo: 沟糟的提示

  1. 问题描述含糊不清

    它只告诉你“文件夹或文件正在被另一个程序使用”,但完全不说是哪个程序

    :point_right: 用户心声:你倒是告诉我是谁占用的啊!我不介意帮你解锁,但你得告诉我目标是谁吧!

  2. 缺乏高级选项

    没有提供任何进一步的帮助,比如“强制解除占用”或“打开任务管理器查看占用”。只能点“重试”或者“取消”,完全没有解决问题的办法。

    :point_right: 用户心声:你就不能内置个任务管理器链接,直接跳过去找到罪魁祸首吗?!

  3. "重试"毫无意义

    如果程序还在占用,“重试”永远失败。这个按钮几乎就是“多试几次,浪费你的时间”的同义词。

    :point_right: 用户心声:能不能加个“试试关闭占用进程”的选项,而不是让我点“重试”徒增挫败感?

  4. 信息展示低效

    提示框里详细列出了文件夹的名字和创建日期,这些信息有时根本没用。用户想知道的只是“到底哪个程序在用?”

    :point_right: 用户心声:谁在用才是重点,我不需要知道文件夹是啥时候生的!

  5. 用户体验缺乏优化

    如果是因为文件资源管理器(Explorer)自己占用了文件夹,这问题就更加搞笑。作为操作系统的亲儿子,占用了还不知道自家人吗?

    :point_right: 用户心声:兄弟,你是 OS 啊!能不能给自己打个补丁?

    Windows 的提示设计,总有种“我知道你遇到了麻烦,但我偏不帮你”的气质!

:hugs: 用户的解决

  • 安装某安全软件,基本都有什么强制删除目录,解除占用之类的功能,但是大部分都没有卵用
  • 通过文件夹名称查找正在占用的进程,并手动关闭,有可能是一些后台进程,需要强制结束进程。

直接介绍几种解决方案:

方案1:

  1. 打开资源监视器
    • Ctrl + Shift + Esc 打开 任务管理器
    • 切换到 性能 标签页,点击底部的 打开资源监视器
  2. 查找文件句柄
    • 切换到 CPU 标签页。
    • 关联的句柄 (Associated Handles) 搜索框中,输入文件名或路径的一部分。
    • 资源监视器会列出当前打开该文件的所有进程。
  3. 操作
    • 找到占用文件的进程后,可以在任务管理器中选择该进程,右键选择 结束任务 或其他操作。

方案二:

Microsoft 提供了一个工具 Sysinternals Handle,可用于查看文件句柄占用情况。

  1. 下载 Handle 工具

  2. 运行 Handle

    • 打开命令提示符 (CMD) 或 PowerShell。

    • 进入 handle.exe 所在目录,例如:

      cd C:\tools
      
    • 输入命令查找文件:替换 file_name 为目标文件名或路径的部分。

      handle.exe file_name
      
  3. 结果解析

    • 输出结果中会显示文件被哪些进程占用,包括进程的 PID(进程 ID)。
  4. 关闭文件占用

    • 可以根据 PID 在任务管理器中找到对应进程并关闭,或使用 handle 命令释放句柄:

      handle.exe -c <Handle_Number> -p <PID>
      
      

    方案三:

    使用第三方工具

    1. Process Explorer

    • Sysinternals 网站 下载 Process Explorer
    • 打开工具,按 Ctrl + F 搜索目标文件名。
    • 它会列出占用文件的所有进程。

    2. LockHunter

    • 下载 LockHunter,它专为解决文件占用问题设计。
    • 右键被占用的文件,选择 What is locking this file?
    • 可以直接解锁或结束占用进程。

方案四:

通过 PowerShell 脚本

使用 PowerShell 脚本来查询文件占用:

powershell
复制代码
$path = "C:\path\to\file.txt"
Get-Process | Where-Object { $_.Modules } | ForEach-Object {
    $_.Modules | Where-Object { $_.FileName -like "*$path*" } | ForEach-Object {
        $_.FileName
        Write-Output "$($_.FileName) is locked by $($_.Name)"
    }
}

$path 替换为目标文件路径。

28 个赞

微软做的powertoys中有个叫lock smith的工具可以查看占用文件的进程,能应付多数简单的场景。

4 个赞

一直被这个问题困扰,楼主有点厉害啊

1 个赞

厉害呀,大佬!

用 PowerToys 的 File Locksmith 最方便直观

image

1 个赞

平时用utools,不咋用这个powertoys,功能太少了 :xhs_015:

我使用powertoys自定义了一个快捷键:alt + \ 实现 alt + tab 的效果

但是我发现自定义快捷键过几个小时就不灵了,必须重启powertoys软件快捷键才能生效。

佬遇到过这种问题吗,至今无解

方案三不错,我也用软件找占用。第一个方案没操作过

感谢佬友,点赞收藏!

keyboard manager确实有挺多问题 :tieba_066:,我尝试把win+space快捷键设置为打开flow launcer,也是一段时间就失效。把CapsLock映射成Control倒是没出过什么问题

垃圾软件,今天上班就卸载