V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hackpro
V2EX  ›  问与答

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

  •  
  •   hackpro · 52 天前 · 703 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近碰上一个问题 局域网两台机器需要处于在线的状态完成一个计算任务
    简单来说就是其中一台机器 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 条回复    2024-07-18 01:01:39 +08:00
    msg7086
        1
    msg7086  
       52 天前
    所以 ping.txt 的内容对吗?
    godall
        2
    godall  
       52 天前   ❤️ 2
    findstr /C:"(0% loss)" ping.txt >nul 里面的%是保留字,需要转义符,在 bat 文件里面改为%%即可。
    hackpro
        3
    hackpro  
    OP
       52 天前 via iPhone
    @msg7086 #1 ping 文件就是命令行执行的结果 只是做了重定向
    hackpro
        4
    hackpro  
    OP
       52 天前 via iPhone
    @godall #2 老哥太牛了
    想请教下这种 batch 这种不是很主流的知识都是怎么获得的 还是说之前做过类似的项目😂
    msg7086
        5
    msg7086  
       52 天前   ❤️ 1
    百分号在批处理中需要转义是基础知识。
    其实打开帖子我第一反应也是百分号转义,但只看到了 100%的百分号,没注意到下面 0%的那个。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1124 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:44 · PVG 07:44 · LAX 16:44 · JFK 19:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.