"fuser -k <folder>" 的Windows批处理等效命令是什么?

8

我有一个Unix shell脚本,可以关闭访问文件夹的任何进程:

fuser -k ..\logs\*

有没有Windows批处理脚本等效于这个?我知道TASKKILL,但我不确定它是否能做到我需要的。有人知道在Windows shell下是否可能实现吗?

2个回答

7

没有内置工具可以枚举句柄,但是您可以使用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 shell中完成,没有其他工具,因为我需要将其部署到许多机器上,而我无法在这些机器上安装任何东西。我也不认为只用纯shell就可以实现,所以我必须说服我的团队在这些机器上安装类似的工具。 - Matt
1
@Matt:注意,Handle(以及任何其他可以执行此操作的工具)必须以管理员权限运行。 - Jon

2

我找到了一个适用于Windows的fuser工具。请查看此链接到Sourceforge:

许多人会问,“为什么不使用SysInternals的handle.exe?”

虽然它是一个非常优秀的实用工具(就像SysInternals的所有东西一样),但至少对我来说,它有一些缺点:

  1. 它进行文件名模式匹配。我需要它能够在输入部分路径时进行精确的文件匹配。例如,当我在C:\TMP目录中,并且我正在检查一个名为out.dat的文件时,我希望它能够查看是否正在使用C:\TMP\OUT.DAT文件,而无需键入完整路径。我认为即使您为handle.exe键入完整路径,它仍将进行模式匹配。

  2. handle.exe似乎总是退出0。出于脚本目的,如果文件未被使用,我需要它退出1,但如果文件被使用,则退出0。这在脚本中非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接