我们有一个脚本推出来映射新驱动器,但没有使用网络使用R: /Delete
,因此驱动器仍然存在,并且有数百个用户的下一个可用字母的映射不正确。我需要删除所有不正确的映射,并希望有一个批处理脚本可以扫描特定的映射,然后管道驱动器号。
Set Path = \\Drive\Folder
Set DriveLetter = ?Scan all mapped drives for %Path%?
Net Use %DriveLetter% /Delete
希望在这里填补空白。
答案 0 :(得分:2)
请不要将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
我不确定发生了什么,但是第一次删除映射驱动器的尝试失败,并显示以下消息:“在与n:的连接上有待处理的打开文件和/或不完整的目录搜索。 “。第二次尝试成功。
答案 1 :(得分:1)
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.
查看此输出,第二列,给我们驱动器号,第三列给我们路径。将其放入for /f
循环以检查路径,如果匹配则删除第二部分中的驱动器号
for /f "tokens=2,3" %%a in ('net use') do if .%%b==.\\Server\DriveCaseSensitive net use %%a /Delete
这意味着如果驱动器已多次映射,它也会检测并删除映射