从 cmd 窗口确定映射的网络路径

从 cmd 窗口确定映射的网络路径

我有一个网络驱动器 - 映射到Z:\

是否有一个简单的命令可以了解完整的网络路径cmd

即如果cmd显示Z:\ABC\,我有一个命令来输出\\networkDrive\MappedDir\ABC

net use很好,但我想获取当前工作目录的完整路径(用于快速复制)。

答案1

类型

net use

这将显示所有当前连接的网络驱动器。

OK           Z:        \\127.0.0.1\c$            Microsoft Windows Network

答案2

bat 的路径可能与工作目录不同。所以我们需要 Mykorrhiza 在 bat 中的第一种方法。为了适应状态丢失以及本地磁盘驱动器的情况,我们需要额外的检查。以下是工作代码:

SET cNetworkPath=    
FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
      SET cNetworkPath=%%i)
if "%cNetworkPath%" == "%CD:~0,2%" (
  FOR /F "tokens=3" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
        SET cNetworkPath=%%i)
)
if "%cNetworkPath%" == "" set cNetworkPath=%CD:~0,2%
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%

上述代码在大多数情况下都有效,但也有net use和find不起作用的情况,以下是最终测试有效的方法:

SET cNetworkPath=
for /f "tokens=2" %%i in ('wmic path win32_mappedlogicaldisk get deviceid^, providername ^| findstr "%CD:~0,2%"') do (set cNetworkPath=%%i)
echo %cNetworkPath%

答案3

这是一个相当老的问题,但是......我正在寻找完全相同的答案,因为我试图创建一个批处理,它将使用 UNC 路径到补丁的实际位置并在那里执行一些操作(因此只需复制并粘贴到另一个位置/文件夹并重新开始)。

由于找不到答案,我自己找到了一个解决方案,但它不是很美观,当然也不是一个简单的命令。但可以批量实现。在 CMD 上它将是:

FOR /F "tokens=2" %i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
      SET cNetworkPath=%i)
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%

您可以复制这四行(最好是 4+空行)并将它们粘贴到 CMD 中,以立即获得复制路径的回显。

在批处理中,你可以稍微不同地使用它:

FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%~d0"') DO (
      bNetworkPath=%%i)
SET bCheckPath=!bOriginalPath!%~p0

变量 %CD% 存储当前路径,您只需要驱动器号,因此您只需使用 NET USE 中的 FIND 命令搜索该驱动器号。使用“tokens=2”(或 3,取决于 NET USE 输出),%i 变量存储您搜索的驱动器号的路径。之后,第二个 SET 命令使用 %CD:~2%(偏移量 2 以截断驱动器号)添加您在网络驱动器上浏览的文件夹。

对于批处理,您可以使用 %~d0 或 %~p0 变量。%0 存储批处理本身的完整路径(例如 Z:\temp\test.bat;%~d0 = Z:;%~p0 = \temp\;d = 驱动器,p = 路径,f = 完整路径,n = 名称),否则它类似于 CMD 命令。

答案4

如果你希望它总是在你的提示下显示它,你可以

set prompt=$M$Q$S$P

它将显示您的 UNC 路径和基于驱动器号的路径。

相关内容