【问题标题】:Storing ping error in batch file在批处理文件中存储 ping 错误
【发布时间】:2017-06-21 20:31:11
【问题描述】:

我正在处理一个记录 ping 结果的批处理文件。

我正在使用此代码来存储值:

FOR /F "tokens=1-9 delims==< " %%a IN ('PING -n 1 -w 2500 %IP%') DO IF 
"%%h"=="TTL" SET RESPONSE=%%g

但由于某种原因,当 ip 不 ping(100% 丢失)时,我无法让它存储任何值,我得到的只是 echo 已关闭。

我什至尝试过使用 ERRORLEVEL=1,但仍然没有。

谁能帮帮我?

【问题讨论】:

  • 您说尽管您提供的代码中没有echo 命令,但仍返回了echo is off 消息。尽管在您提供的代码中不是 Set,您也可以使用 %IP%。尝试提供更多代码以及预期输出的示例。
  • "@"echo off SET /P IP=输入 ip。 :ping "@"echo (PING -n 1 -w 2500 %IP%)>>ping.txt FOR /F "tokens=1-9 delims==
  • 为了绕过脚本的一行,您应该在开头使用注释 Rem 或注释标记 :: .另外,请将您的代码作为编辑添加到您的原始问题中,作为评论几乎无法解读。
  • 另外,看看那段代码,您似乎使用的是"@"echo 而不是@echo,这可以解释您的“echo is on”消息。

标签: batch-file cmd


【解决方案1】:

问题是当ping 没有连接时,RESPONSE 变量永远不会被设置。从脚本中删除或注释掉@ECHO OFF,以查看实际发生的情况。

C:\src>TYPE x.bat
FOR /F "usebackq tokens=1-9 delims==< " %%a IN (`PING -n 1 -4 -w 2500 192.168.0.2`) DO (
    IF "%%h"=="TTL" (SET RESPONSE=%%g)
)
echo %RESPONSE%

C:\src>CALL x.bat

C:\src>FOR /F "usebackq tokens=1-9 delims==< " %a IN (`PING -n 1 -4 -w 2500 192.168.0.2`) DO (IF "%h" == "TTL" SET RESPONSE=%g )

C:\src>(IF "" == "TTL" SET RESPONSE=data: )

C:\src>(IF "" == "TTL" SET RESPONSE= )

C:\src>(IF "" == "TTL" SET RESPONSE= )

C:\src>(IF "(100%" == "TTL" SET RESPONSE=1 )

C:\src>echo
ECHO is on.

【讨论】:

  • 如果响应变量从未设置,我将如何创建一个语句来识别这一点,我尝试使用 if "Response" 为 null 或 ""
  • 你试过IF "%RESPONSE%" EQU "" {ECHO No response)
猜你喜欢
  • 1970-01-01
  • 2022-10-21
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2017-10-26
  • 2018-04-21
相关资源
最近更新 更多