wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Windows上,如何杀死目录中打开文件的所有进程?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Windows的一个非常令人沮丧的“功能”是进程锁定文件并阻止删除目录. 我正在寻找一种方法来查找在该目录中打开文件的所有进程,例如unix上的“lsof”.我正在寻找一些powersHell魔法,而我宁愿不必购买一些自定义维护工具. 所以我有好消息和坏消息.我将从坏消息开始……我还没有找到一种方法来严格关闭PowerSHell中的锁定文件.好消息是它可以通过PowerSHell脚本完成,并从Sy
Windows一个非常令人沮丧的“功能”是进程锁定文件并阻止删除目录.

我正在寻找一种方法来查找在该目录中打开文件的所有进程,例如unix上的“lsof”.我正在寻找一些powersHell魔法,而我宁愿不必购买一些自定义维护工具.

解决方法

所以我有好消息和坏消息.我将从坏消息开始……我还没有找到一种方法来严格关闭PowerSHell中的锁定文件.好消息是它可以通过PowerSHell脚本完成,并从SysInternals的一个名为Handle.exe的免费实用程序获得一些帮助.这是我手头的脚本:

@H_301_19@Function Close-LockedFile{ Param( [Parameter(Mandatory=$true,ValueFromPipeline=$truE)][String[]]$Filename ) Begin{ $HandleApp = 'C:\sysinternals\Handle.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: File\s+(\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上,如何杀死目录中打开文件的所有进程?全部内容,希望文章能够帮你解决在Windows上,如何杀死目录中打开文件的所有进程?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。