问题:我在使用批处理文件识别网络共享被映射到的驱动器字母时遇到了麻烦。
背景:我们在工作中映射和使用了十几个网络共享驱动器,批处理文件目前将驱动器映射到 "通常 "的驱动器字母。但我想知道它是否被映射到任何一个字母(如果是,这个字母是什么),因为我们有200多台PC使用这些映射的驱动器,而字母经常是不同的,所以再次映射到 "通常 "的字母会导致重复映射的网络驱动器。
我可以看到,网络共享被映射到一个驱动器,在 net use
而且它可以通过UNC路径或映射的盘符来访问,所以不知道为什么我不能得到盘符。
我找到了以下3个关于这个问题的答案,但是由于某些原因,没有一个对我有效。以下是每个答案的URL、代码和得到的结果。任何帮助都是非常感激的
for /f "tokens=2" %%i in ('net use ^| find "\\NetworkShare1\Share1"') do set netdrive=%%i
结果: \{fnTahomafs10bord0shad01cH00FFFF}NetworkShare1/Share1 has beenmapping
FOR /F "tokens=2" %%D IN ('net use ^| find ":" ^| find /I "\\NetworkShare1\Share1"') DO ECHO Drive letter is %%D
结果: 驱动信是网络共享1号
for /f "tokens=2,3" %%i in ('net use') do if '%%j=='\\NetworkShare1\Share1 set drive=%%i
echo %drive%
结果: 回声是关闭的。
在我的windows 10机器上。
@echo off
set UNC=\\yourserver\yourshare
set drv=
for /f "delims=: " %%a in ('net use ^| find /i "%UNC%"') do set drv=%%a
if defined drv (
echo "%UNC%" is mapped to %drv%:
) else (
echo "%UNC%" is not mapped to anything.
)
echo/
pause
请注意,在"... ... "后面有一个空格 :
此外,我应该注意到,如果共享被映射到多个驱动器字母,这将只返回 "最后一个 "驱动器字母映射。 我相信它是按字母顺序排列的。
你知道吗--我建议改变一下。 这个将列出所有映射到路径的驱动器。和 它将包括部分匹配。 换句话说,如果你搜索 \serv1\data 它也会匹配 \serv1\data/subfolder。 但是,它也会匹配\serv1\datagram。 这可能是有用的,也可能是个问题。
@echo off
set "UNC=\\yourserver\yourshare"
set UNCfound=no
for /f "tokens=1,2 delims=: " %%a in ('net use ^| find /i "%UNC%"') do (
echo "%%~b" is mapped to %%a:
set UNCfound=yes
)
if "%UNCfound%"=="no" echo "%UNC%" is not mapped to anything.
echo/
pause
从我的测试来看,如果你在 find
表达式,你可以进行精确匹配。
@echo off
set "UNC=\\yourserver\yourshare"
set UNCfound=no
for /f "tokens=1,2 delims=: " %%a in ('net use ^| find /i "%UNC% "') do (
echo "%%~b" is mapped to %%a:
set UNCfound=yes
)
if "%UNCfound%"=="no" echo "%UNC%" is not mapped to anything.
echo/
pause
下面是一个以 wmic
指挥,使用 Win32_LogicalDisk
阶层:
@echo off
set "UNC=\\ATMEDFS01\workgroups\R&D\Systems"
set "DRV="
for /F "delims=" %%I in ('
wmic LogicalDisk where "DriveType=4 and ProviderName='%UNC:\=\\%'" get DeviceID /VALUE 2^> nul
') do for /F "tokens=1* delims==" %%J in ("%%I") do set "DRV=%%K"
if defined DRV (
echo The network share "%UNC%" is mapped to drive %DRV%.
) else (
echo The network share "%UNC%" is NOT mapped to a drive.
)
在 where
的条款 wmic
命令行,每 \
需要通过翻倍的方式来逃避,这就是 子串替换表达式 %UNC:\=\\%
是为了: