【问题标题】:What is the Windows batch equivalent of "fuser -k <folder>"?“fuser -k <文件夹>”的 Windows 批处理等效项是什么?
【发布时间】:2013-08-06 06:09:38
【问题描述】:

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

fuser -k ..\logs\*

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

【问题讨论】:

    标签: windows batch-file scripting kill-process fuser


    【解决方案1】:

    不使用内置工具(没有任何东西可以枚举句柄),但您可以使用 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。其余的都是不言自明的。

    【讨论】:

    • 感谢您的评论。它需要完全在 Windows shell 中完成,没有其他工具,因为我需要将它部署到许多我无法安装的机器上。我认为仅使用普通 shell 也不可能,所以我必须说服我的团队在机器上安装类似的东西。
    • @Matt:请注意,Handle(以及任何其他可以执行此操作的工具)必须以管理权限运行。
    【解决方案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。这是 在脚本中非常有用。

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多