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

135 天前
 hackpro

最近碰上一个问题 局域网两台机器需要处于在线的状态完成一个计算任务
简单来说就是其中一台机器 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 站大佬帮忙看看哪里出了问题😄😂

779 次点击
所在节点    问与答
5 条回复
msg7086
135 天前
所以 ping.txt 的内容对吗?
godall
135 天前
findstr /C:"(0% loss)" ping.txt >nul 里面的%是保留字,需要转义符,在 bat 文件里面改为%%即可。
hackpro
135 天前
@msg7086 #1 ping 文件就是命令行执行的结果 只是做了重定向
hackpro
135 天前
@godall #2 老哥太牛了
想请教下这种 batch 这种不是很主流的知识都是怎么获得的 还是说之前做过类似的项目😂
msg7086
135 天前
百分号在批处理中需要转义是基础知识。
其实打开帖子我第一反应也是百分号转义,但只看到了 100%的百分号,没注意到下面 0%的那个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX