hackpro
V2EX  ›  问与答

关于 Windows 命令行直接运行和 Batch 脚本执行结果不一致的问题

  •  
  •   hackpro · Jul 17, 2024 · 1363 views
    This topic created in 719 days ago, the information mentioned may be changed or developed.

    最近碰上一个问题 局域网两台机器需要处于在线的状态完成一个计算任务
    简单来说就是其中一台机器 ping 另外一台机器 如果 100%成功则开启计算任务
    否则休眠 30 秒 继续重复以上操作

    命令行代码倒是不难写 核心代码为

    ping -n 4 %IP_ADDRESS% | findstr /C:"(0% loss)"
    

    命令行直接运行结果为 >>> packets sent = 4, Received = 4, Lost = 0 (0% loss),
    说明机器在线 4 次请求 100%成功 0% lost

    但是把所有代码放到一个脚本里面运行
    已知机器处于在线从命令行直接运行没有问题但是放到脚本中会发生判断错误 具体代码如下

    @echo off
    setlocal
    
    set IP_ADDRESS=10.0.0.101
    
    :pingloop
    
        ping -n 4 %IP_ADDRESS% > ping.txt
    
        :: Check for 100% success
        findstr /C:"(0% loss)" ping.txt >nul
        if %errorlevel% == 0 (
            echo Ping successful. Running the program...
            :: DO SOMETHING...
            goto end
        ) else (
            echo Ping failed. Sleeping for 30 seconds...
            timeout /t 30 /nobreak >nul
            goto pingloop
        )
    
    :end
    del ping.txt
    endlocal
    exit /b
    

    肯定 v 站大佬帮忙看看哪里出了问题😄😂

    5 replies    2024-07-18 01:01:39 +08:00
    msg7086
        1
    msg7086  
       Jul 17, 2024
    所以 ping.txt 的内容对吗?
    godall
        2
    godall  
       Jul 17, 2024   ❤️ 2
    findstr /C:"(0% loss)" ping.txt >nul 里面的%是保留字,需要转义符,在 bat 文件里面改为%%即可。
    hackpro
        3
    hackpro  
    OP
       Jul 17, 2024 via iPhone
    @msg7086 #1 ping 文件就是命令行执行的结果 只是做了重定向
    hackpro
        4
    hackpro  
    OP
       Jul 17, 2024 via iPhone
    @godall #2 老哥太牛了
    想请教下这种 batch 这种不是很主流的知识都是怎么获得的 还是说之前做过类似的项目😂
    msg7086
        5
    msg7086  
       Jul 18, 2024   ❤️ 1
    百分号在批处理中需要转义是基础知识。
    其实打开帖子我第一反应也是百分号转义,但只看到了 100%的百分号,没注意到下面 0%的那个。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   970 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 21:21 · PVG 05:21 · LAX 14:21 · JFK 17:21
    ♥ Do have faith in what you're doing.