0

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

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

想在这里填空。

4

2 回答 2

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: 的连接。” . 第二次尝试成功。

于 2012-11-08T20:30:44.727 回答
1

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

示例输出:

将记住新的连接。


状态 本地 远程 网络

-------------------------------------------------- -----------------------------------------
断开连接问:\\Server1\Drive
                                                 微软视窗网络
好的 S:\\Server2\Drive2
                                                 微软视窗网络
命令成功完成。

查看此输出,第 2 列为我们提供驱动器号,第 3 列为我们提供路径。将其放入for /f循环以检查路径,如果匹配,则删除第二部分中的驱动器号

for /f "tokens=2,3" %%a in ('net use') do if .%%b==.\\Server\DriveCaseSensitive net use %%a /Delete

这意味着如果驱动器已被多次映射,它还将检测并删除映射

于 2012-11-08T20:03:24.920 回答