8

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

fuser -k ..\logs\*

是否有与此等效的 Windows 批处理脚本?我知道 TASKKILL,但我不确定它是否能满足我的需要。有谁知道这是否可以通过 Windows shell 实现?

4

2 回答 2

6

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

例子:

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

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

于 2013-08-05T13:54:28.727 回答
2

我找到了一个fuser适用于 Windows 的。检查此指向Sourceforge 的链接:

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

虽然它是一个真正优秀的实用程序(就像所有 SysInternals 的东西一样),但它不够——至少对我来说——有几个原因:

  1. 它进行文件名模式匹配。我需要它与部分输入进行精确的文件匹配。例如,当我在目录中时,我C:\TMP正在检查一个名为对于handle.exe,它仍然会进行模式匹配。out.datC:\TMP\OUT.DAT

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

于 2017-04-05T09:35:40.793 回答