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
驱动器映射是独立生成的,因此任务可以进行
如果一切正常应该有一个短暂的闪光,否则如果没有找到共享他们应该自然超时。
Advent 在我的例子中是另一个工作站而不是服务器。将其改回 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 ":"
我有一个 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 驱动器映射是独立生成的,因此任务可以进行 如果一切正常应该有一个短暂的闪光,否则如果没有找到共享他们应该自然超时。
Advent 在我的例子中是另一个工作站而不是服务器。将其改回 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 ":"