找到网络驱动器的 UNC 路径?

我需要能够确定网络 Q 驱动器的路径在一个 WEBMethod 项目的工作。之前的代码在我的配置文件中。出于安全考虑,我在目录中放置了单个字符字母。我不确定分号是用来干什么的,但我认为双斜杠是驱动器名的意思。

Question: Is there an easy way on a Windows 7 machine to find out what the full path of the UNC is for any specific drive location?

密码:

allowedWritePaths=Q:/A/B/C/D/E/
allowedReadPaths=C:/A/B;//itpr99999/c$/A/FileName.txt
allowedDeletePaths=
439353 次浏览

在 Windows 中,如果你已经映射了网络驱动器,但是你不知道它们的 UNC 路径,你可以启动一个命令提示符(开始→运行→ cmd.exe)并使用 net use命令来列出你映射的驱动器和它们的 UNC 路径:

C:\>net use
New connections will be remembered.


Status       Local     Remote                    Network


-------------------------------------------------------------------------------
OK           Q:        \\server1\foo             Microsoft Windows Network
OK           X:        \\server2\bar             Microsoft Windows Network
The command completed successfully.

注意,这显示了命令运行所在的用户上下文的映射和连接网络文件共享列表。如果您在您自己的用户帐户下运行 cmd.exe,显示的结果是您自己的网络文件共享。如果在另一个用户帐户(如本地管理员)下运行 cmd.exe,则会看到该用户的网络文件共享。

这个问题已经得到了回答,但是因为有一个 更方便的方法来获取 UNC 路径,我推荐使用 Path Copy,它是免费的,你可以通过点击一下就可以得到任何你想要的路径:

Https://pathcopycopy.github.io/

下面的截图展示了它是如何工作的,最新版本有更多的选项,当然还有 UNC 路径:

enter image description here

如果您使用的是 MicrosoftOffice:

  1. -将驱动器、文件夹或文件从文件资源管理器拖动到 Word 文档或 Outlook 电子邮件的正文中
  2. 选择「 在此创建超链接

插入的文本将是所拖动项的完整 UNC。

答案是一句简单的 PowerShell俏皮话:

Get-WmiObject Win32_NetworkConnection | ft "RemoteName","LocalName" -A

如果您只想为一个特定的驱动器提取 UNC,那么添加一个 where 语句:

Get-WmiObject Win32_NetworkConnection | where -Property 'LocalName' -eq 'Z:'  | ft "RemoteName","LocalName" -A
$CurrentFolder = "H:\Documents"
$Query = "Select * from Win32_NetworkConnection where LocalName = '" + $CurrentFolder.Substring( 0, 2 ) + "'"
( Get-WmiObject -Query $Query ).RemoteName

或者

$CurrentFolder = "H:\Documents"
$Tst = $CurrentFolder.Substring( 0, 2 )
( Get-WmiObject -Query "Select * from Win32_NetworkConnection where LocalName = '$Tst'" ).RemoteName
wmic path win32_mappedlogicaldisk get deviceid, providername

结果:

DeviceID  ProviderName
I:        \\server1\Temp
J:        \\server2\Corporate
Y:        \\Server3\Dev_Repo
Z:        \\Server3\Repository

作为批处理文件(Src) :

@if [%1]==[] goto :Usage
@setlocal enabledelayedexpansion
@set _NetworkPath=
@pushd %1
@for /f "tokens=2" %%i in ('wmic path win32_mappedlogicaldisk get deviceid^, providername ^| findstr /i "%CD:~0,2%"') do @(set _NetworkPath=%%i%CD:~2%)
@echo.%_NetworkPath%
@popd
@goto :EOF
:: ---------------------------------------------------------------------
:Usage
@echo.
@echo. Get the full UNC path for the specified mapped drive path
@echo.
@echo.  %~n0 [mapped drive path]

例如:

C:\> get-unc-path.bat z:\Tools\admin


\\EnvGeoServer\Repository\Tools\admin

批处理脚本改编自 https://superuser.com/a/1123556/16966。请一定去投票的一个太,如果你喜欢这个解决方案。

更新2021-11-15: bug 修复。以前的批处理只报告驱动器号 UNC 根,而忽略了还报告文件夹路径。

%CD%是从 %%i通过某种 CMD 魔术设置的。
%CD:~0,2%%CD:~2%分别提取驱动器号和尾随路径 子串

我的5美分: 通过 PowerShell 运行的 PowerShell 脚本将创建一个指向 PowerShell 及其本身的快捷方式,这样你就可以将文件拖放到 PowerShell 上,从而将 UNC 路径(或本地普通文件路径)放入剪贴板

Https://inmood.ch/get-unc-path-of-fileserver-file/

# run without arguments will create a file called DropFileToGetUNCPath.lnk


# if you drop a file onto the shortcut it'll return the UNC path


if($args[0] -eq $null)


{


# creating the shortcut to drop files later on


$path = $pwd.path


$script = $MyInvocation.MyCommand.Path


$WshShell = New-Object -comObject WScript.Shell


$Shortcut = $WshShell.CreateShortcut("$path\DropFileToGetUNCPath.lnk")


$Shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"


$Shortcut.Arguments = "-noprofile -file """ + $script + """"


$Shortcut.Save()


}else{


$file = $args[0]


}


 



$drive = $pwd.drive.name + ":"


# find UNC paths for directories


$drives = net use


$drive = ($drives -match ".*" + $drive + ".*")


#debug


#echo $drive


$parts = $drive -split "\s{1,11}"


#debug


#echo $parts


$windowsDrive = $parts[1]


$uncDrive = $parts[2]


$file -replace $windowsDrive, $uncDrive | clip