关闭另一个进程打开的文件

时间:2018-07-05 08:05:36

标签: vbscript

我正在使用一种外部方法来验证XML文件。该方法的问题在于它会打开XML文件,并且永远不会关闭它,因此我必须以某种方式关闭该文件。有谁知道VBScript是否可以做到这一点?

1 个答案:

答案 0 :(得分:1)

危险!关闭另一个进程的打开文件句柄可能会导致数据丢失。仅当您确切地知道自己在做什么时,才执行此操作。您已被警告。


VBScript本身无法关闭文件句柄,但是您可以使用handle命令行实用程序来实现此目的。

filename = "C:\path\to\your.xml"

Set sh = CreateObject('WScript.Shell')

Set p = sh.Exec("handle """ & filename & """")
pout = p.StdOut.ReadAll

Set re = New RegExp
re.Pattern    = "pid: (\d+)\s+type: file\s+([a-f0-9]+):"
re.IgnoreCase = True

For m In re.Execute(pout)
    pid = m.Submatches(0)
    hnd = m.Submatches(1)
Next

If Not(IsEmpty(pid) And IsEmpty(hnd)) Then
    sh.Run "handle -c " & hnd & " -y -p " & pid, 0, True
End If

如果该实用程序不在您的PATH中,则必须指定该程序的完整路径。此外,该程序还会要求您在首次运行EULA时接受它,因此,请手动运行一次以执行此操作,或者在命令行中添加参数-accepteula