Batch file 批处理以查找特定路径映射的所有驱动器号

Batch file 批处理以查找特定路径映射的所有驱动器号,batch-file,Batch File,我们推出了一个脚本来映射一个新的驱动器,但是没有使用net useR:/Delete,因此驱动器仍然存在,并且存在到下一个可用字母的错误映射,供数百名用户使用。我需要删除所有不正确的映射,并希望有一个批处理脚本可以扫描特定的映射,然后通过管道传输驱动器号 Set Path = \\Drive\Folder Set DriveLetter = ?Scan all mapped drives for %Path%? Net Use %DriveLetter% /Delete 正在查找此处的空白。n

我们推出了一个脚本来映射一个新的驱动器,但是没有使用net use
R:/Delete
,因此驱动器仍然存在,并且存在到下一个可用字母的错误映射,供数百名用户使用。我需要删除所有不正确的映射,并希望有一个批处理脚本可以扫描特定的映射,然后通过管道传输驱动器号

Set Path = \\Drive\Folder
Set DriveLetter = ?Scan all mapped drives for %Path%?
Net Use %DriveLetter% /Delete

正在查找此处的空白。

net use
将显示驱动器映射(已连接或未连接)

示例输出:

New connections will be remembered. Status Local Remote Network ------------------------------------------------------------------------------- Disconnected Q: \\Server1\Drive Microsoft Windows Network OK S: \\Server2\Drive2 Microsoft Windows Network The command completed successfully.
这意味着,如果驱动器已映射多次,它还将检测并删除映射。net use将显示驱动器映射(已连接或未连接)

示例输出:

New connections will be remembered. Status Local Remote Network ------------------------------------------------------------------------------- Disconnected Q: \\Server1\Drive Microsoft Windows Network OK S: \\Server2\Drive2 Microsoft Windows Network The command completed successfully.
这意味着,如果驱动器已映射多次,它也将检测并删除映射。请不要出于自己的目的使用PATH变量。它是一个保留变量,将其用于除预期用途以外的任何用途都可能对批处理会话造成严重破坏

下面是一个使用WMIC的解决方案。当传递给WMIC时,反斜杠必须用另一个反斜杠转义。第二个令牌的检查是for/F如何处理WMIC的unicode输出的工件

@echo off
setlocal enableDelayedExpansion
set "remotePath=\\Drive\Folder"
for /f "usebackq skip=1 tokens=1,2" %%A in (
  `wmic netuse where "RemotePath='!remotePath:\=\\!'" get localName 2^>nul`
) do if "%%B" neq "" <nul net use %%A /delete >nul 2>&1 || net use %%A /delete
@echo关闭
setlocal enableDelayedExpansion
设置“远程路径=\\Drive\Folder”
对于/f“usebackq skip=1令牌=1,2”%%A(
`wmic netuse,其中“RemotePath=”!RemotePath:\=\\!”,获取localName 2^>nul`
)如果“%%B”neq“nul 2>&1 | | net使用%%A/delete,请执行此操作

我不确定发生了什么,但第一次尝试删除映射驱动器失败,并显示以下消息:“连接到n:时有打开的文件和/或未完成的目录搜索挂起。”。第二次尝试成功。

请不要出于自己的目的使用PATH变量。它是一个保留变量,将其用于除预期用途以外的任何用途都可能对批处理会话造成严重破坏

下面是一个使用WMIC的解决方案。当传递给WMIC时,反斜杠必须用另一个反斜杠转义。第二个令牌的检查是for/F如何处理WMIC的unicode输出的工件

@echo off
setlocal enableDelayedExpansion
set "remotePath=\\Drive\Folder"
for /f "usebackq skip=1 tokens=1,2" %%A in (
  `wmic netuse where "RemotePath='!remotePath:\=\\!'" get localName 2^>nul`
) do if "%%B" neq "" <nul net use %%A /delete >nul 2>&1 || net use %%A /delete
@echo关闭
setlocal enableDelayedExpansion
设置“远程路径=\\Drive\Folder”
对于/f“usebackq skip=1令牌=1,2”%%A(
`wmic netuse,其中“RemotePath=”!RemotePath:\=\\!”,获取localName 2^>nul`
)如果“%%B”neq“nul 2>&1 | | net使用%%A/delete,请执行此操作

我不确定发生了什么,但第一次尝试删除映射驱动器失败,并显示以下消息:“连接到n:时有打开的文件和/或未完成的目录搜索挂起。”。第二次尝试成功。

如果远程路径包含空格,则此操作无效。我想不出一个使用网络的可靠解决方案。使用WMIC NETUSE相当简单-请看,这很有魅力。在映射中不使用空格是标准做法,因此我们不必担心。如果远程路径包含空格,这将不起作用。我想不出一个使用网络的可靠解决方案。使用WMIC NETUSE相当简单-请看,这很有魅力。在映射中不使用空格是标准做法,因此我们不必担心。