我正在编写一个脚本,应该将网络驱动器映射到字母Z
,我使用命令net use z: \\path
,问题在于,如果用户已经使用此字母,我将无法对其进行映射,有没有办法检查此驱动器(Z)的存在,并且如果它存在,则卸载它并将其挂载到另一个字母上,仍然可以使用我脚本需要的z
驱动器,这是安装的一部分,并且应该在Z驱动器上。
我正在编写一个脚本,应该将网络驱动器映射到字母Z
,我使用命令net use z: \\path
,问题在于,如果用户已经使用此字母,我将无法对其进行映射,有没有办法检查此驱动器(Z)的存在,并且如果它存在,则卸载它并将其挂载到另一个字母上,仍然可以使用我脚本需要的z
驱动器,这是安装的一部分,并且应该在Z驱动器上。
您可以通过IF EXIST Z:\
来检查驱动器是否已挂载。这应该有效:
if exist z:\ (
net use z: /delete
)
net use z: \\path
(net use z: \\my\unc\path)
。请注意,本翻译仅为指导方便,不得用于任何法律目的。 - Jeroen:: 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
)
它是做什么的?让我们把它分解一下
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.
该输出会被导入到 Find.exe(Windows系统中类似于 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
NET USE /D命令将删除所选映射的驱动器映射。
net use Z:
if %errorlevel% EQU 0 net use Z: /delete
net use Z: \\path
net use \\some\share
。 - dmarlowif not exist z:\ (
net use z: \\ComputerName\ShareName
)
在批处理中,您可以编写如下代码:
@echo off
net use V: >nul 2>&1
if %errorlevel% equ 0 goto unmap
V:\
不起作用,同时net use
显示额外的信息,我现在已经使用>nul 2>&1
来抑制它。if exist z:\ (
for /F "tokens=1,2*" %%G in ('net use^|Find "\\"^|Find /I "z:"') do ( net use y: %%H )
net use z: /delete
)
net use z: \\path
if exist z:\
不会检查驱动器号是否只是映射。相反,它仅在驱动器号已映射且目标可用时返回 true。因此,使用您的解决方案,您无法删除当前不可用的映射驱动器。 - stackprotector
for /F "tokens=1,2*" %G in ('net use^|Find "\\"^|Find /I "Z:"') do @echo %H %I
开始,以查看示例。 (在批处理脚本中使用它时,请将“%”符号加倍,使用“%%G”,“%%H”等)。了解更多... 然后您可以将简单的@echo %%H %%I
替换为 FOR循环中的多个命令。如有不理解之处,请随时更新您的问题并提出更多问题。 - JosefZnet use * \\path
。或者您可以使用PUSHD命令,它将映射下一个可用的驱动器号,并立即更改到该路径的目录:PUSHD \\path
。 - Squashman