如何获取包含共享名的文件

问题描述 投票:0回答:1

是否存在一种方法,最好是在 VBA 中或从 VBA(直接或通过 Win32、PowerShell、VBS、WMI 或 CMD 调用)以编程方式返回/获取包含完全限定本地文件名的第一个 Windows 共享名?

编辑:澄清一下,(a)几乎所有情况下的相关共享名称都是共享文件夹的名称,而不是共享驱动器的名称; (b) 相关共享名将是在文件的递归父目录中第一个遇到的,而不是驱动器的子目录(因此执行后者的 Scripting.Drive.ShareName 不适合)。

目标是为网络用户(出于当前目的,在同一本地子网上且没有 Active Directory)提供一个允许他们访问相关文件的字符串,例如,类似于

\ServerName\ShareName \路径\文件名.ext

以编程方式获取文件的计算机名称和本地 URI 很容易,但共享名称元素却难以捉摸。 困难在于,以编程方式获取的本地 URI 仅引用本地文件系统,以驱动器盘符开头,例如

.DriveLetter:\path o\FileName.ext
,这当然毫无意义给网络用户。

请注意,共享可以是包含目录或任何更高级别的超级目录。

任何关于是否以及如何做到这一点的想法,包括有关方法的一般想法,我们将不胜感激。

vba share file-permissions local-files windows-share
1个回答
0
投票

请尝试下一个功能:

Function MappedWBFullPath(wb As Workbook) As String
 If Len(wb.Path) > 2 _
     Then MappedWBFullPath = """" & wb.Name & """ is not on a mapped drive...": Exit Function
  With CreateObject("Scripting.FileSystemObject")
     MappedWBFullPath = .GetDrive(wb.Path).ShareName
  End With
End Function

您可以测试它从此类映射驱动器打开工作簿并激活它。然后运行下一个测试

Sub
:

Sub testMappedWBFullPath()
  Debug.Print MappedWBFullPath(ActiveWorkbook)
  Debug.Print MappedWBFullPath(ThisWorkbook)
  Debug.Print "Worbook network full name: " & MappedWBFullPath(ActiveWorkbook) & "\" & ActiveWorkbook.Name
End Sub

请在测试后发送一些反馈。

© www.soinside.com 2019 - 2024. All rights reserved.