批量检查是否存在映射的网络驱动器

use*_*786 23 cmd batch-file batch-processing

我正在编写一个应该将网络驱动器映射到字母的脚本Z,我正在使用该命令 net use z: \\path,问题是如果用户已经在使用这封信我将无法映射它,有什么办法吗?检查此驱动器的存在性(z)以及是否存在以卸载它并将其安装到另一个字母仍然使用z我的脚本所需的驱动器,这是安装的一部分,它应该在Z上驾驶.

Mic*_*elS 36

您可以检查驱动器是否已安装IF EXIST Z:\.这应该工作:

if exist z:\ (
    net use z: /delete
)
net use z: \\path
Run Code Online (Sandbox Code Playgroud)

  • 也很有用:`如果不存在z:\(net use z:\\ my\unc\path)` (10认同)
  • 这仅回答了问题的一部分,并没有回答将驱动器重新映射到不同字母的完整问题。 (2认同)
  • 笔记; 如果您有一个已断开连接(但仍被记住)的映射驱动器,则以这种方式访问​​时不会显示该驱动器。我还没有找到解决方法/最终只是删除 if 条件并删除映射驱动器,无论是否存在) (2认同)

小智 5

我使用以下脚本位取消映射所有驱动器:

:: First unmap all network drives
FOR /F "tokens=1,2,3" %%G IN ('net use^| Find "\\"') DO (
  ECHO.Unmapping %%I from drive letter %%H
  NET USE %%H /D > NUL
)
Run Code Online (Sandbox Code Playgroud)

它有什么作用?让我们把它分开

FOR /F "tokens=1,2,3" %%G IN () DO ()--> 将遍历 () 和第一个、第二个和第三个单词(任何空格用作分隔符)之间定义的集合分别作为 %%G、%%H 和 %%I 可用。

('...') 将运行一个命令...并将结果传递给 FOR 循环

net use 将输出如下内容:

New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           M:        \\diskstation\music       Microsoft Windows Network
OK           P:        \\diskstation\home        Microsoft Windows Network
OK           V:        \\diskstation\video       Microsoft Windows Network
OK           X:        \\diskstation\photo       Microsoft Windows Network
The command completed successfully.
Run Code Online (Sandbox Code Playgroud)

然后将此输出通过管道传送到查找“\\”的 Find.exe(相当于 grep 的窗口)。

管道符号| 使用 ^ 进行转义,因此 cmd 不会直接执行它。然后输出将是:

OK           M:        \\diskstation\music       Microsoft Windows Network
OK           P:        \\diskstation\home        Microsoft Windows Network
OK           V:        \\diskstation\video       Microsoft Windows Network
OK           X:        \\diskstation\photo       Microsoft Windows Network
Run Code Online (Sandbox Code Playgroud)

NET USE /D 将删除所选映射的驱动器映射