【问题标题】:Issue with special character in Batch批处理中的特殊字符问题
【发布时间】:2017-10-19 13:47:15
【问题描述】:

一个我无法解决的问题。

在我的 for /f delims 参数中,我有一个特殊字符 <,我的脚本没有注意到它。

此脚本测试网络以满足 IT 需求。它记录断开的网络和速度。

set /p IP="IP : "
set /p MS="Millisecond : "
for /f "tokens=1,7 delims==< " %%a in ('ping.exe -w 1000 -n 1 %IP% ^| findstr /i /c:"temps"^|^| echo "Ne Repond Pas"') do (
 if "%%b" == "" (
 echo "%date% %time:~,8% Ne repond pas" >> log_%IP%.txt 
 ) ELSE (
  if %%b GEQ %MS% ( 
   echo "%date% %time:~,8% ms=%%b" >> log_%IP%.txt 
   timeout /t 1 > NUL 
  ) 
 ) 
) 
goto loop

当ping结果

我尝试在&lt; 之前使用转义字符^,但这不起作用。

例如

Ping 8.8.8.8 :日志文件完美,因为结果中没有&lt;

Ping 127.0.0.1 : 脚本登录文件

谢谢

【问题讨论】:

  • 您需要向我们展示一些“有效”或“无效”的典型输出行,因为您显然没有使用英语(因此ping 输出格式可能略有不同)。我只是将您的代码edited 为标准格式-我不知道^|^|echo... 是关于什么的-请解释一下。您是否使用echo 显示了%%a 和%%b 用于问题条件?
  • @oasisck 您在此处确定 ping 是否成功的做法很糟糕。阅读带有批处理代码的this answer 与您的任务非常相似,使用退出代码ping 进行日志记录并详细解释此代码的工作原理。
  • %MS% 设置为什么?由于&lt;是分隔符,所以不能出现在%%a或%%b中;因此问题一定出在其他地方......

标签: batch-file for-loop special-characters ping


【解决方案1】:

谢谢大家

我发现了我的问题,然后 F*** Windows...

当结果为&lt;1ms 或更高(如=33 ms)时,ping 的结果略有不同

注意空格。

我只是调整我的代码

for /f "tokens=1,8 delims=m=^< " %%a in ('ping.exe -w 1000 -n 1 %IP% ^| findstr /i /c:"temps"^|^| echo "Ne Repond Pas"') do (

它有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多