我有一个Unix shell脚本,可以关闭访问文件夹的任何进程:
fuser -k ..\logs\*
有没有Windows批处理脚本等效于这个?我知道TASKKILL,但我不确定它是否能做到我需要的。有人知道在Windows shell下是否可能实现吗?
我有一个Unix shell脚本,可以关闭访问文件夹的任何进程:
fuser -k ..\logs\*
有没有Windows批处理脚本等效于这个?我知道TASKKILL,但我不确定它是否能做到我需要的。有人知道在Windows shell下是否可能实现吗?
没有内置工具可以枚举句柄,但是您可以使用Sysinternals的Handle工具获取对文件有打开句柄的PID列表。然后,您可以使用FOR /F
解析输出并使用TASKKILL
结束进程。
示例:
for /f "skip=4 tokens=3" %i in ('handle ..\logs\') do taskkill /pid %i
< p >skip=4
跳过Handle输出中的版权信息,tokens=3
从每行输出中选出PID。其余内容不言自明。
我找到了一个适用于Windows的fuser
工具。请查看此链接到Sourceforge:
许多人会问,“为什么不使用SysInternals的
handle.exe
?”虽然它是一个非常优秀的实用工具(就像SysInternals的所有东西一样),但至少对我来说,它有一些缺点:
它进行文件名模式匹配。我需要它能够在输入部分路径时进行精确的文件匹配。例如,当我在
C:\TMP
目录中,并且我正在检查一个名为out.dat
的文件时,我希望它能够查看是否正在使用C:\TMP\OUT.DAT
文件,而无需键入完整路径。我认为即使您为handle.exe键入完整路径,它仍将进行模式匹配。
handle.exe
似乎总是退出0。出于脚本目的,如果文件未被使用,我需要它退出1,但如果文件被使用,则退出0。这在脚本中非常有用。