【问题标题】:Batch File - Infinite loop checking vpn connection批处理文件 - 无限循环检查 vpn 连接
【发布时间】:2016-03-17 23:26:28
【问题描述】:

我有这个批处理文件可以在连接到 vpn 时自动执行此过程。在 vpn 连接后它还需要执行一些其他步骤,所以我编写了一个循环来不断检查是否有 vpn 连接。但即使 vpn 连接,它也永远无法跳出循环。请帮忙。

这是相关代码

"%ProgramFiles(x86)%\Cisco Systems\VPN Client\ipsecdialer.exe" -c -sd -user %username% -pwd %vpn_password% "lifeline-ceacc.elluciancloud.com"

:loop
set length_of_file = 0
("%ProgramFiles(x86)%\Cisco Systems\VPN Client\vpnclient.exe" stat) >_vpnstat.txt
PING -n 5 127.0.0.1>nul
set /p vpnstat=<_vpnstat.txt
call :strlen length_of_file vpnstat
echo %length_of_file%
::del _vpnstat.txt::
IF %length_of_file% LSS 46 goto :loop


::doing some other stuff here::


goto :eof

:strlen <resultVar> <stringVar>
(   
    setlocal EnableDelayedExpansion
    set "s=!%~2!#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" ( 
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
)
( 
    endlocal
    set "%~1=%len%"
    exit /b
)

【问题讨论】:

  • 文件_vpnstat.txt在连接建立的情况下包含什么,如果没有呢?我了解您正在检查返回字符串的长度是否为 46 个或更多字符;您可以使用if "%vpnstat:~45%"=="" goto :loop,而不是复杂的字符串长度计算;这使用子字符串扩展——见set /?...
  • 嗯... ("%ProgramFiles(x86)%\Cisco Systems\VPN Client\vpnclient.exe" stat) >_vpnstat.txt 是循环中的第二行代码,因此它包含调用的结果(vpnclient.exe stat)。如果没有连接,文件应该是 44 字长。如果有连接,应该接近100。
  • 我希望您提供一些示例文本...无论如何,它必须是单行文本,因为您通过重定向到set /P 来阅读它;我建议将echo(%vpnstat% 放在set /P 命令行之后进行测试,因为set /P 可能会忽略某些字符...
  • 编辑:老兄! nvmd 关于我正在使用的内容。将您的设置为答案。你的建议奏效了。 :) ....... 没关系。没用。我开枪了

标签: batch-file command-line automation infinite-loop


【解决方案1】:
set /p vpnstat=<_vpnstat.txt
IF "%vpnstat:~46%" equ "" goto loop

会更容易...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多