禁止批处理中的某一条命令回显结果(批处理中的sleep)

本人在批处理的过程中有这样一个需求:

等待一段时间,然后再接着做别的事情。在windows中没有类似与linux脚本中sleep n这样的命令,因此我们另觅他法。这里我用如下的方式实现,如果你有别的方法我们可以交流交流。

 

ping 1.1.1.1 -w 500 -n 1

 

 

上面的命令的意思是ping 1.1.1.1的主机,我们知道这个主机在任何地方都是不存在的,那么一定会超时,我们可以设定超时的时长,在这里我设定的500ms,这个可以根据自己的需要的来更改。而ping命令默认的尝试次数是4,如果我们只想让他尝试一次,就用-n 1来限定。

 

好了,执行我们的脚本,即使你用@还是echo off。当执行这条命令的时候一定会有结果回显,显示出来的内容就是request time out。我们只想让他达到睡眠500ms的效果,不想有什么结果显示,所以得想办法把回显的内容去掉。

 

这时候重定向就可以达到这个效果。这时候我们的这条命令就变成这样了:

@ping 1.1.1.1 -w 500 -n 1 > wait.log

 

这样会产生wait.log文件,如果你打开这个文件,里面的内容就是ping 的输出结果。

 

如果你不想看到这个文件,也可以做到,在批处理的最后加上:

set WAITLOG=”./wait.log”

if EXIST WAITLOG ( del %WAITLOG% )

 

但是我们还有更为简单的另外一种选择:

@ping 1.1.1.1 -w 500 -n 1 > nul

 

注意这里并不是让结果重定向写到nul这个文件中去,具体的效果可以先运行这个命令,然后查看当前目录下面有没有nul这个文件。运行结果当然是没有了。”>”这个符号肯定是重定向了,没错,这里nul是系统内定的一个管道,或者看作内置对象。

 

ok, 这样当批处理执行完后,你也看不到wait.log这个文件,就相当于没有产生一样。

 

下面是对上面的内容的一点补充。

上面的第一种方法是重定向到指定的文件,我们可以做一个实验:

1. 执行下面的命令,然后查看test.txt这个文件

@ping 1.1.1.1 -n 1 > test.txt

2. 执行下面的命令,然后再次查看test.txt这个文件

@ping 1.0.0.0 -n 1 > test.txt

我们发现当第二次查看test.txt这个文件的时候,里面之前的内容被清除了,只剩下了后一次执行命令的结果。

 

我们接着再做一个实验:

1. 执行下面的命令,然后查看test.txt这个文件

@ping 1.1.1.1 -n 1 >> test.txt

2. 执行下面的命令,然后再次查看test.txt这个文件

@ping 1.0.0.0 -n 1 >> test.txt

这次我们发现用”>>”重定向可以在之前内容上面累加。

 

我们得出结论:

“>”和”>>”都可以重定向,前者会清除以前的内容,而后者追加。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *