当我想删除一个文件夹的时候,碰到这样典型的错误:
The action can't be completed because the folder is open in another program
提示该动作不能执行,因为文件夹被另外的程序打开。
问题来了,我如何找到使用这个文件或者文件夹的进程?
第一个解决方案
参考微软官方的文档:https://gallery.technet.microsoft.com/How-to-find-out-which-c0d4e60e
步骤1: 在dos窗口执行 Import-Module 脚本名称
例如: Import-Module C:\Scripts\FindLockingProcess.psm1
步骤2: 通过命令 Get-Help FindLockingProcess –Full 显示使用这个文件使用的语法或者参数。
步骤3: 例子:
FindLockingProcess -FileOrFolderPath "C:\test.xlsx"
2820 EXCEL.EXE c:\test.xlsx
说明被excel执行文件打开了。
PowerShell 脚本:
IF((Test-Path -Path $FileOrFolderPath) -eq $false) {
Write-Warning "File or directory does not exist."
}
Else {
$LockingProcess = CMD /C "openfiles /query /fo table | find /I ""$FileOrFolderPath"""
Write-Host $LockingProcess
}
第二个解决方案:
在Windows 7, 8, and 10 操作系统下,可以用资源监控器来查看。
在dos窗口里打 resmon.exe,在cpu一栏里输入被占用的文件名称,如图一:
第三个解决方案:
使用微软工具:Process Explorer v16.32 (中文名称:进程浏览器)如图二:
地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
使用方法,打开软件,转到查找>查找句柄或DLL(快捷键Ctrl+F)。在"Handle or DLL substring:"文本框中,键入文件的路径(例如"C:\path\to\文件.txt")并单击"搜索",应该列出对该文件具有打开句柄的所有进程。
Process Explorer显示有关已打开或加载哪些句柄和DLL的信息。这个“进程浏览器”显示由两个子窗口。顶部窗口始终显示当前活动进程的列表,包括其拥有的帐户的名称,而底部窗口中显示的信息取决于Process Explorer所处的模式:如果处于处理模式,您将看到处理在顶部窗口中选择的进程已打开;如果Process Explorer处于DLL模式,您将看到该进程已加载的DLL和内存映射文件。 Process Explorer还具有强大的搜索功能,可以快速显示哪些进程打开了特定的句柄或加载了DLL。
Process Explorer的独特功能使其可用于跟踪DLL版本问题或处理泄漏,并提供有关Windows和应用程序工作方式的建议。
第四个解决方案:众多的第三方软件。
1、WhoLockMe,比较花哨的一个软件,但是请注意,好像在windows10 下不工作,不知道为啥。
地址:http://www.dr-hoiby.com/WhoLockMe/
2、https://lockhunter.com/
3、https://emcosoftware.com/unlock-it
4、https://www.nirsoft.net/utils/opened_files_view.html