在Windows上,如何杀死目录中打开文件的所有进程?
发布时间:2020-12-14 05:44:49 所属栏目:Windows 来源:网络整理
导读:Windows的一个非常令人沮丧的“功能”是进程锁定文件并阻止删除目录. 我正在寻找一种方法来查找在该目录中打开文件的所有进程,例如unix上的“lsof”.我正在寻找一些powershell魔法,而我宁愿不必购买一些自定义维护工具. 解决方法 所以我有好消息和坏消息.我
Windows的一个非常令人沮丧的“功能”是进程锁定文件并阻止删除目录.
我正在寻找一种方法来查找在该目录中打开文件的所有进程,例如unix上的“lsof”.我正在寻找一些powershell魔法,而我宁愿不必购买一些自定义维护工具. 解决方法
所以我有好消息和坏消息.我将从坏消息开始……我还没有找到一种方法来严格关闭PowerShell中的锁定文件.好消息是它可以通过PowerShell脚本完成,并从SysInternals的一个名为Handle.exe的免费实用程序获得一些帮助.这是我手头的脚本:
Function Close-LockedFile{ Param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)][String[]]$Filename ) Begin{ $HandleApp = 'C:sysinternalsHandle.exe' If(!(Test-Path $HandleApp)){Write-Host "Handle.exe not found at $HandleApp`nPlease download it from www.sysinternals.com and save it in the afore mentioned location.";break} } Process{ $HandleOut = Invoke-Expression ($HandleApp+' '+$Filename) $Locks = $HandleOut |?{$_ -match "(.+?)s+pid: (d+?)s+type: Files+(w+?): (.+)s*$"}|%{ [PSCustomObject]@{ 'AppName' = $Matches[1] 'PID' = $Matches[2] 'FileHandle' = $Matches[3] 'FilePath' = $Matches[4] } } ForEach($Lock in $Locks){ Invoke-Expression ($HandleApp + " -p " + $Lock.PID + " -c " + $Lock.FileHandle + " -y") | Out-Null If ( ! $LastexitCode ) { "Successfully closed " + $Lock.AppName + "'s lock on " + $Lock.FilePath} } } } 现在,如果要对目录中的所有文件执行此操作,只需获取所有文件,并在文件的FullName属性上运行ForEach循环.然后,您应该可以删除目录而不会出现问题. 编辑:这是Handle.exe网页的链接:https://technet.microsoft.com/en-us/sysinternals/bb896655.aspx(感谢Kev,因为我懒得自己查一下……谢谢Kev!) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows 下自动备份mysql数据库,删除以前的数据库文件
- windows-server-2008-r2 – 如果运行时间超过15分钟,请在Wi
- Windows 下 Tomcat start.bat Log4j2 不显示(UnsupportedC
- 批处理文件 – 在dos批处理文件中检查输入命令?
- .net-4.0 – 适用于Windows窗体的Microsoft .NET Framework
- Windows – 运行64位操作系统有什么好处?
- 在Windows和Linux上获取Python中唯一的计算机ID
- 是否有任何理由在.NET上使用Win32 API(在C或C中)?
- windows-server-2008 – 一个不错的Windows磁带备份程序来取
- windows-phone-8 – 快速应用程序恢复无法在Windows Phone
推荐文章
站长推荐
热点阅读