执行下面的bat后,一直是echo处于关闭状态,而且ping的数据也没有保存。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行下面的bat后,一直是echo处于关闭状态,而且ping的数据也没有保存。相关的知识,希望对你有一定的参考价值。

执行下面的bat后,一直是echo处于关闭状态,而且ping的数据也没有保存。想达到的目的是,根据当天的日期保存ping数据,然后数据里面加上时间。
@echo on
:START
echo >>aa.txt
ping 192.168.100.104 >d:\%date:~0,4%%date:~5,2%%date:~8,2%.txt
for /f "tokens=* delims= " %%i in (temp.txt) do (echo %date% %time:~0,5% %%i>>aa.txt)
goto START

大神们看看 哪儿有错误。

@echo off
set "str=E:\%date:~0,4%%date:~5,2%%date:~8,2%.txt"
del "%str%" /f/s/q >nul
echo.正在测试,请勿关闭...
echo.本次测试时间为:%time% >>%str%
for /f "delims=" %%a in ('ping 192.168.1.1') do (
echo.%%a >>%str%
)
echo.测试完成,生成文件:%str%&pause>nul

1、你的逻辑都有问题啊,而且你自写的批处理感觉起来像东拼西凑起来的。
2、你的第四行使用〉而不是〉〉就等于每次都是新建,最后显示的结果只有一行。
3、ECHO处于关闭状态是因为你的第三行,应该为:echo. >>aa.txt
4、FOR语句中的TEMP.txt是哪里出来的?上文根本没看到有啊。。

总而言之,太乱了,哈哈。
参考技术A @echo on这里。。
换成@echo off
就ok咯

bat命令哪里错了 为啥一开始不是显示1 而是echo处于打开状态的?

set n=1 & (echo %n%) &pause
set /a n=%n%+1 & echo %n%
pause

结果

bat 运行的过程大概是读取下一行,然后无脑把%%之间的变量替换成对应的值,把结果显示出来,然后执行结果,所以程序是先把%n%替换成 n 的原值(空白),再依次执行set、echo、pause

echo不带参数(空格不作为参数)的时候就是显示“echo处于打开状态”或“echo处于关闭状态”
参考技术A setlocal enabledelayedexpansion
set n=1&(echo %n%)&pause
set/a n=%n%+1&echo %n%
pause

这样就OK了

追问

  为什么要开延缓环境变量?

追答

作用是读取一条完整的命令后,不立即对该变量赋值而会在某个单条命令执行前在赋值。

追问

  第一个使用两个感叹号 不是两个百分号
  应该是
  setlocal enabledelayedexpansion
  set n=1&(echo !n!)&pause
  set/a n=%n%+1&echo %n%
  pause
  不过还是谢谢你!!

本回答被提问者和网友采纳

以上是关于执行下面的bat后,一直是echo处于关闭状态,而且ping的数据也没有保存。的主要内容,如果未能解决你的问题,请参考以下文章

bat命令哪里错了 为啥一开始不是显示1 而是echo处于打开状态的?

bat批处理ECHO 处于关闭状态是怎么回事

bat批处理ECHO 处于关闭状态是怎么回事

如何处理ECHO 处于关闭状态

在运行bat批处理文件时echo处于关闭状态如何解决

麻烦bat命令高手们,帮我看看,下面这段代码到底哪里有问题,为啥运行的时候,总提示echo 处于关闭状态