批处理文件中的“如果不存在 \\ip\SharedDirectory\。”会造成延迟

批处理文件中的“如果不存在 \\ip\SharedDirectory\。”会造成延迟

我想在资源管理器中打开网络驱动器。网络驱动器托管在一台 PC 上,有时通过 WLAN 连接,有时通过 LAN 连接。因此,它有两个不同的 IP。我不知道 PC 何时通过其中一个连接。

使用快捷方式打开驱动器有两个缺点。

  1. 显然,如果 PC 不存在于第一个快捷方式网络地址,我必须尝试两者。
  2. 如果我打开一个不存在(临时)的驱动器的快捷方式,那么资源管理器将冻结大约 30 秒。

所以我编写了一个包含以下命令的批处理:

@echo off

echo try LAN

if not exist \\<IPLAN>\Buecherei$\. (goto WLAN)
    explorer \\<IPLAN>\Buecherei$\.
    goto end

:WLAN
echo try WLAN

if not exist \\<IPWLAN\Buecherei$\. (goto end)
    explorer \\<IPWLAN>\Buecherei$\.
    goto end

:end

但是,如果 PC 通过 WLAN 连接,并且我启动批处理文件,则开始查找基于 WLAN-IP 地址的文件夹路径也需要相当长的时间。我该如何消除这种延迟?

答案1

您可以使用ping%errorlevel%来检查网络是否可用。这样,您可以快速进行检查。

以下是编写脚本的方法。将 IP 地址替换为实际地址。

    @echo off
    
::  -- Lets check which network is available.


    echo try LAN
    
::  -- We'll ping the address with a timeout of 30ms exactly 1 times, but hide the ping to the user
    ping 12.34.56.78 -n 1 -w 30 > nul
    
::  -- Now, lets find out if the destination was reached or not.
::  -- %errorlevel% will return 0 when it was reached, 1 when it timed out.

    if %errorlevel%==0 goto LAN
    
::  -- If we reached here, LAN was not available. Trying WLAN...


    echo try WLAN
    
::  -- We'll ping the address with a timeout of 30ms exactly 1 times, but hide the ping to the user
    ping 87.65.43.21 -n 1 -w 30 > nul
    
::  -- Now, lets find out if the destination was reached or not.
::  -- %errorlevel% will return 0 when it was reached, 1 when it timed out.

    if %errorlevel%==0 goto WLAN
    

::  -- If we reached here, WLAN was not available either. We'll just quit the script.
    goto end
    

:LAN
::  -- open the explorer
    explorer \\12.34.56.78\Buecherei$\.
    goto end
    
:WLAN
::  -- open the explorer
    explorer \\87.65.43.21\Buecherei$\.
    goto end
    
:end

答案2

更好的解决方案是使用 DNS 名称,并让 DHCP 服务器更新 DNS 名称。

因此,\\<IPLAN>\ or \\<IPWAN>\

您改用 \\SERVERNAME\,然后网络会进行 DNS 查找并获取正确的值,然后就完成了。

相关内容