我有一个 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
skip=4
跳过 Handle 输出中的版权信息,并tokens=3
从输出的每一行中挑选出 PID。其余的都是不言自明的。
我找到了一个fuser
适用于 Windows 的。检查此指向Sourceforge 的链接:
许多人会问,“为什么不使用
handle.exe
SysInternals?”虽然它是一个真正优秀的实用程序(就像所有 SysInternals 的东西一样),但它不够——至少对我来说——有几个原因:
它进行文件名模式匹配。我需要它与部分输入进行精确的文件匹配。例如,当我在目录中时,我
C:\TMP
正在检查一个名为对于handle.exe,它仍然会进行模式匹配。out.dat
C:\TMP\OUT.DAT
handle.exe
似乎总是退出 0。出于脚本目的,如果文件未被使用,我需要它退出 1,如果是,则退出 0。这在脚本中非常有用。