批处理中回声命令有什么用

  介绍

这篇文章给大家分享的是有关批处理中回声命令有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  众所周知,如果回波后面跟一个环境变量,但是该变量却为空时,相当于不加任何参数的呼应,即输出当前回声是还上是。很多文章或者教程给出的解决方案都是在呼应后面加一个点号呼应。,这样就会输出空行。

代码如下:


@echo
回声%恶魔。tw %
::回声。
echo. %恶魔。tw %


暂停据我所知,用回声输出空行至少有十种方法:

代码如下:


@echo了

回声=
呼应,
回声;

回声+

/echo (
回声)

回声:
的回声。
回声\
暂停


这十种方法可以分为三组,每组的效率依次递减。可悲的是,那些被奉为经典的教程给出的却是效率最低那组中的回声。

的回声。不仅效率低下,而且还容易引发错误:

代码如下:



cd进行@echo .>回声
的回声。暂停


我知道你很难接受,但事实的确如此。

第一组中回声后面的=,,都是批处理中的分隔符,所以CMD可以正确地解析出回声命令,并把=;作为回波命令的参数。是的,你没有看错,分隔符并不是用来分隔命令与参数,它们通常是参数的一部分。既然是参数,那么为什么不会被输出?那是因为回波命令直接跳过了参数的第一个字符,从第二个字符开始输出,而第二个字符是空,所以输出了空行。

你可能又要问,那为什么用空格做分隔符却不能输出空行呢?那是因为在输出之前,CMD要检查回声命令的参数是不是在或者,或者参数为空:首先跳过所有空白字符,如果跳过之后字符串就结束了,那么就认为没有加参数,输出回声是还上是,如果字符串没有结束,就调用wcsnicmp函数来判断剩下的字符串是否为上或者,进而修改回声的状态。

因此加上很多空格也是一样的效果:

代码如下:


@echo了

回声回声alt="批处理中回声命令有什么用“>
可以看的到,CMD对:。\的处理跟+[]/不太一样,如果是+ []/CMD会直接把它们从命令中删除并且添加到原有参数的前面;而如果是:。\并且CMD拓展是开启的话,那么会多调用一次GetFileAttributes函数获取文件属性,多调用一次函数自然会多花一些时间,所以第三组的效率又稍稍比第二组的低些。批处理中回声命令有什么用“> </p> <p>再来解释一下为什么呼应。有时候会引起错误。文件名中是不能出现:。\的理论上GetFileAttributes函数都应该返回1 (INVALID_FILE_ATTRIBUTES),然而事实却不是如此,我也不知道这算不算GetFileAttributes函数的缺陷:<br/> </p> <p>代码如下:</p> <p> <br/> # include & lt; stdio.h><br/> # include & lt; windows.h><br/> <br/> int主要()<br/> {<br/>文件* fp=fopen (“echo文件关闭(fp);
printf (“0 x % \ n", GetFileAttributes(“回声:“));
printf (“0 x % \ n", GetFileAttributes(“回声!”);
printf (“0 x % \ n", GetFileAttributes(“回声”/?);
返回0;
}


如果你测试一下上面的C程序,就会发现呼应。那行返回的不是1。

如果GetFileAttributes函数返回的不是1(一般表示文件不存在),也不是0×10(表示文件是文件夹),那么命令还是会保持原来的样子,当成外部命令运行。

代码如下:



cd进行@echo .>回声
的回声。暂停


'回声强生# 39;没有被识别为内部或外部命令,可操作的程序或批处理文件。

代码如下:



cd进行@echo .>回声
对本地disableextensions
的回声。暂停


关闭了CMD拓展,没有问题。

代码如下:


@echo了
md回声
的回声。暂停


回声是文件夹而不是文件,没有问题。
最后总结一下吧,在大部分情况下,你都应该使用第一组的回声,回声;回声=来进行输出,它们的效率跟回波(空格)是一样的,并且可以用来输出上或者,在变量为空时还能输出空行。

但是回声,回声;回声=却不能输出以/?开头的行,如果你需要,可以使用第二组的回声+回波/回声回声,它们的效率低一些,但能保证原样输出。
我不建议你使用第三组的回声:回声。回声\,如果你仍然要像垃圾教程里面那样用,我也没有办法。

批处理中回声命令有什么用