我有一位用户需要将某个网络位置映射到驱动器O:
。此驱动器经常会丢失其到 的映射O:
,但会显示在不同的字母下,例如H:
、K:
和L:
。正常程序是他打电话给帮助台(我)过来并将驱动器取消映射/重新映射到正确的字母。
在重新映射过程中,我确保选中了该框Remap on login
,但该设置似乎不起作用。
有什么方法可以编写此任务的脚本吗?通常,我会使用net use /delete \\server\share
或net 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 中一样\
– 它将后面的字符从特殊字符变为非特殊字符,反之亦然。我们使用,以便将字符^|
的解释|
推迟到括号内的命令被解析之后。%%D
是FOR
循环索引变量。您可以使用任何字母,但与普通的 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。