Windows批处理等效于“ fuser -k ”?

问题描述 投票:8回答:2

我有一个Unix shell脚本,它将杀死正在访问文件夹的所有进程:

fuser -k ..\logs\*

是否有Windows批处理脚本与此等效?我知道TASKKILL,但不确定是否能满足我的需求。有人知道Windows Shell是否可以做到这一点?

windows batch-file scripting kill-process fuser
2个回答
6
投票

没有内置工具(没有可以枚举句柄的东西),但是您可以使用Sysinternals Handle tool获取文件上具有打开句柄的PID的列表。然后,您可以使用FOR /F解析输出,并使用TASKKILL结束进程。

示例:

for /f "skip=4 tokens=3" %i in ('handle ..\logs\') do taskkill /pid %i

skip=4跳过Handle输出中的版权信息,而tokens=3从输出的每一行中选择PID。其余的不言自明。


2
投票

我找到了Windows的fuser。检查this link到Sourceforge:

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

虽然是真正出色的实用程序(如SysInternals的所有东西是),由于以下几个原因,它至少无法满足我的要求:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.