cmd 脚本中的 net use 永远挂起 - 如果服务器拒绝连接,如何设置超时

net use in cmd script hangs forever - how to set a timeout if server denies connection

我有一个 Windows 连接多个网络驱动器的批处理文件。它首先对服务器执行 ping 操作,如果成功,则尝试将共享映射到 net use ...:

SET host=mini3
IF /I NOT %host% == %COMPUTERNAME% (
    ping -4 -n 2 -w 1000 %host% | find "TTL=" > NUL
    IF !ERRORLEVEL! EQU 0 (
        echo Q: == \%host%\Q_ -- mini3-Volumes
        net use Q: \%host%\Q_ /persistent:yes > NUL && echo OK
    ) ELSE (
        echo %host% not found. Skipping.
    )
)

有时,即使可以通过 ping 访问机器,net use 命令也会永远挂起。它挂起的原因似乎是由于 SMB 服务器配置错误,and/or 在 Windows 存储在客户端的凭据中。

因此,当发生这种情况时,无论出于何种原因,我都想打印错误并继续进行下一个驱动器映射。

Windows Timeout 命令似乎实际上是一个“延迟”命令,相当于 Unix sleep,而不是超时。

有没有一种好方法可以让 net use 命令真正超时,而不中止整个 .cmd 脚本?

有几个模组我没问题 关键是更正 %errorlevel%,因为没有运行时延迟 included/needed 驱动器映射是独立生成的,因此任务可以进行 如果一切正常应该有一个短暂的闪光,否则如果没有找到共享他们应该自然超时。

A​​dvent 在我的例子中是另一个工作站而不是服务器。将其改回 mini3

@echo off
SET "host=Advent"

IF /I NOT "%host%"=="%COMPUTERNAME%" (
    ping -4 -n 2 -w 1000 %host% | find "TTL=" > NUL
    IF %ERRORLEVEL% EQU 0 (
        echo Q: == \%host%\Q_ -- %host%-Volumes
        START "Z Drive" net use Z: \%host%\users /persistent:yes
        START "Q Drive" net use Q: \%host%\Q_ /persistent:yes
REM surplus from above line > NUL && echo OK
    ) ELSE (
        echo %host% not found. Skipping.
    )
)

rem delay this file so it waits to let the new connections process above
timeout 2
net use | find ":"