断开映射网络位置的脚本

断开映射网络位置的脚本

我有一位用户需要将某个网络位置映射到驱动器O:。此驱动器经常会丢失其到 的映射O:,但会显示在不同的字母下,例如H:K:L:。正常程序是他打电话给帮助台(我)过来并将驱动器取消映射/重新映射到正确的字母。

在重新映射过程中,我确保选中了该框Remap on login,但该设置似乎不起作用。

有什么方法可以编写此任务的脚本吗?通常,我会使用net use /delete \\server\sharenet use x: /delete(其中 x: 是驱动器号),但第一个不起作用,因为路径已分配字母,而第二个不起作用,因为它重新映射到的字母并不总是相同的。

系统是 Windows NT(我们使用一段时间没有更新的专用软件)。

答案1

只要您没有尝试保存其他共享,您就可以在批处理或登录脚本中使用以下命令:

 NET USE * /delete
 NET USE O: \\server\share

这将删除所有已分配的(*)共享并将其设置为您想要的驱动器/路径。

答案2

要识别共享当前映射到的驱动器号并取消映射:

@echo off
for /f "tokens=2" %%D in ('net use ^| find ":" ^| find "\\server\share") do net use %%D /delete

评论:

  • ^就像在 Unix 中一样\– 它将后面的字符从特殊字符变为非特殊字符,反之亦然。我们使用,以便将字符^|的解释|推迟到括号内的命令被解析之后。
  • %%DFOR循环索引变量。您可以使用任何字母,但与普通的 Windows 命令提示符变量不同,
    • 它只能是一个字母,所以不要尝试使用%%DRV, 和
    • 它区分大小写。
  • 我之所以包括这个find ":",是因为当我测试这个时,我得到了一个  net use  看起来像这样的输出
好的 H:\\WONDERLAND\HUMPTYDUMPTY
好的 Q:\\WONDERLAND\QUEENOFHEARTS
OK \\WONDERLAND\CHESHIRECAT

因此,您需要采取一些措施来过滤掉不包含驱动器号的行。

  • 您可能知道(因为我在上面暗示过),FOR这是一个循环构造。您的语句对于从管道中出来的每行都会执行一次 net use ... | find,并%%D设置为该行上的第二个字符串(标记)。如果您想执行多个命令和/或更具选择性,您可以这样做:
对于/f“tokens=2”%%D在('net use ^| find“:”^| find“\\server\share”)中执行(
    ...
    如果 %%D==Z: (
        ...
    ) 别的 (
        ...
    ...

想要更多?更改"tokens=2""tokens=2,3"%%E并将设置为第三个标记;即驱动器号映射到的 UNC。

相关内容