如何获得打开文件的完整path

我有一个在Windows服务器上运行的脚本来执行某些文件的操作。 脚本经常失败,因为不同的用户(甚至我自己)已经在服务器上打开了他们忘记closures的文件共享,所以文件夹被locking。

我已经添加了代码来检查net file打开net file ,并closures它们,如果他们匹配某些模式。 net file的局限性在于总结了打开文件的path,例如

 ID Path User name # Locks ------------------------------------------------------------------------------- 2 C:\Program Files\...\cocoon-2.1.11\ huttarl 0 

当打开文件的完整path是

 C:\Program Files\Apache Software Foundation\cocoon-2.1.11 

所以,当我的脚本检查文件path匹配某种模式,如“Apache”时,它有时会错过net file列表中间的net file

所以我的问题是,如何在脚本中获得打开文件的完整path?

目前,我正在使用cygwin / bash。 所以如果我不得不转换到WSH,将会有一些移植工作要做。 但如果这是唯一的select,我会去的。

如果重要的话,系统信息面板上说我的Windows版本是Windows Server Standard,(c)2007,SP2。

我发现以下有用的:

openfiles /query /v | findstr "string what You want"

你应该使用PsFile

关于它

“net file”命令向您显示其他计算机在执行命令的系统上打开的文件列表,但会截断较长的path名,并且不会让您看到远程系统的信息。 PsFile是一个命令行实用程序,它显示远程打开的系统上的文件列表,还允许您按名称或文件标识符closures打开的文件。

啊…看起来好像是我在一年或更久之前才发现的。

原来,如果你给net file的打开文件的ID,它会输出完整的path。

所以对于我在问题中的例子,如果我input

 C:\>net file 2 

我会得到的

 File ID 2 User name huttarl Locks 0 Path C:\Program Files\Apache Software Foundation\cocoon-2.1.11\ Permissions (none) The command completed successfully. 

使用这个function意味着

  • 从初始net file命令的输出中parsing出ID号码
  • 循环遍历它们,并用每个ID再次调用net file
  • testing第二个输出
  • 并closurespath与模式匹配的文件。

而使用PSFile,我可以用一个简单的命令来完成所有这些。 但是在net use ,当我们将脚本迁移到新服务器时,我不必安装第三方软件。 决定,决定…