[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 【续】[一日一教学](42)显示提示信息:echo

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html


帮助信息:
  1. 显示信息,或将命令回显打开或关上。
  2.   ECHO [ON | OFF]
  3.   ECHO [message]
  4. 要显示当前回显设置,键入不带参数的 ECHO。
复制代码
命令概括:
echo,全英文echo,意为:回音,反射;这里可以引申为回显。


参数详解:
echo有两种语法,两种都是经常用到的。

先看第一种:
  1. ECHO [ON | OFF]
复制代码
这种语法,意思是“将命令回显打开或关上”。
echo off 常出现在批处理文件的首行,而且还稍有不同,多了个@
例如:
  1. @Echo Off
  2. net user
  3. Pause>Nul
复制代码
效果:
  1. \\HELLOWORLD-PC 的用户帐户
  2. -------------------------------------------------------------------------------
  3.        Administrator            Guest
  4. 命令成功完成。
复制代码
为什么都在首行加上这条语句呢?
echo off是什么意思?
前面加上@又是为什么?

第一个问题是由第二个问题和第三个问题组合形成的,所以只要回答了第二、第三问,第一问也迎刃而解了。


echo off是什么意思?
on 和 off 都是echo 的关键字,所谓关键字就是系统规定、有特殊用途的字符。
echo on 是打开回显,echo off 是关闭回显。

系统默认是echo on,所以每次为了关闭回显,都会在代码的行首加上echo off,加以关闭。

不在行首加echo off。
例如:
  1. net user
  2. Pause>Nul
复制代码
效果:
  1. C:\Users\helloworld\Desktop>net user
  2. \\HELLOWORLD-PC 的用户帐户
  3. -------------------------------------------------------------------------------
  4.         Administrator            Guest
  5. 命令成功完成。
  6. C:\Users\helloworld\Desktop>Pause1>Nul
复制代码
看出差别来了吗?
不关闭回显,net user命令 pause >nul都回显了出来,这在程序运行时会影响结果的美观度,所以大家一般在行首加上echo off。



前面加上@又是为什么?
echo off只能关闭 echo off后面的代码的回显,但不能关闭自身的回显。

还是举例来说明。
例如:
  1. echo off
  2. net user
  3. Pause>Nul
复制代码
效果:
  1. C:\Users\helloworld\Desktop>echo off
  2. \\HELLOWORLD-PC 的用户帐户
  3. -------------------------------------------------------------------------------
  4.         Administrator            Guest
  5. 命令成功完成。
复制代码
net user命令 pause >nul都没有回显了出来,但是Echo off却显示出来了。

所以才要在行首加上@echo off.

echo也可以光杆使用,输入光杆echo,显示当前回显的状态,关闭 or 打开。


第二种语法:
ECHO [message]


message,全英文message,意为:消息、信息、留言。

message可以是任意的字符,但是不能是 on 和 off,因为这两个是关键字,所以,你想输出 on 和 off ,必须用逗号等命令分隔符代替默认的空格分隔符。
例如:
  1. C:\Users\helloworld\Desktop>echo,on
  2. on
  3. C:\Users\helloworld\Desktop>echo,off
  4. off
复制代码
例如:
  1. @echo off
  2. echo 慷慨歌燕市,从容作楚囚。
  3. echo 引刀成一快,不负少年头。
  4. echo “曲线救国”的汪精卫都能做出这样的诗,我辈怎敢不自勉。
  5. echo off
  6. echo on
  7. Pause>Nul
复制代码
扩展阅读:
1.用echo输出空行。
  1. @echo off
  2. echo.
  3. echo 慷慨歌燕市,从容作楚囚。
  4. echo;
  5. echo 引刀成一快,不负少年头。
  6. echo\
  7. echo “曲线救国”的汪精卫都能做出这样的诗,我辈怎敢不自勉。
  8. echo/
  9. echo hello
  10. echo,
  11. pause
复制代码
参考:echo命令耗时对比
http://bbs.bathome.net/thread-4482-1-1.html#pid28940

2.echo 结合重定向输出符 > 可以作为创建文本文件的命令。

例如:
  1. echo hello >c:\1.txt
  2. start 1.txt
复制代码
在c盘根目录创建一个内容为hello的1.txt


由于脚本特性,即是可运行程序又是文本文件,所以echo其实还可以创建各种脚本,vbs、js、html,只要你学会这些脚本语言的使用,你就可以用echo创建它们。

我做了一工具,就是利用了这一特性。
例如:
批处理实现-以网页套图形式浏览当前文件夹中的图片


【补充】需要向一个文件写入多行内容时,需要注意的几个地方:
http://bbs.bathome.net/thread-13860-1-1.html#pid233014
1

评分人数

谢谢!这个方法很有用。

TOP

【补充】需要向一个文件写入多行内容时,需要注意的几个地方。

例如需要把以下内容写入 test.txt
on
1
bathome
2
net
3

很多人为了防止数字后面紧跟重定向符号会被当做句柄而无法正常写入文件,会在行尾添加一个额外的空格:
  1. echo bbs >test.txt
  2. echo 1 >>test.txt
  3. echo bathome >>test.txt
  4. echo 2 >>test.txt
  5. echo net >>test.txt
  6. echo 3 >>test.txt
复制代码
但是在某些特殊的场景下,这个行尾多余的空格是不被允许的,可能导致其他程序处理txt的时候出错。

解决的方法之一是把重定向符号写在前面:
  1. >test.txt  echo bbs
  2. >>test.txt echo 1
  3. >>test.txt echo bathome
  4. >>test.txt echo 2
  5. >>test.txt echo net
  6. >>test.txt echo 3
复制代码
可以进一步改进的地方是,加上括号,一是可以避免重复写那么多遍文件名,而是可以提高代码执行速度:
  1. (echo bbs
  2. echo 1
  3. echo bathome
  4. echo 2
  5. echo net
  6. echo 3
  7. )>test.txt
复制代码
如果遇到包含很多特殊字符的文本,可以参考这篇文章里面 findstr + more 的方法来写入文件:
https://mp.weixin.qq.com/s/McvY4CiR-SYGaCha7lmjIw
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# zaixinxiangnian


    也不是转义,只是语法格式而已
ECHO [ON | OFF]

这里是空格。

TOP

本帖最后由 zaixinxiangnian 于 2011-8-29 10:35 编辑

分号后面加空格  -- 就会输出 空格+要输出的字符串
分号前面加空格  -- 就会输出 分号+要输出的字符串
总归好像 ( ;  ,  . )等在ECHO中都可以带替空格,但是加 OFF/ON 参数时就起到转义作用

TOP

echo后面的分隔符论坛里讲述,通常会用到以下几种(我印象的你自己试验):
echo;Hello
echo.Hello
echo,hello
……
为什么这样?区别以下看看:
for %%a in (1  a  %Var%  你好)  do echo;%%a&echo  %%a
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

继续学习
继续支持

TOP

建议增加以下内容:
1、怎样输出一个空行
2、当echo后面是一个变量的时候,为了防止遇到on或者off而出错,应该用逗号等命令分隔符代替默认的空格分隔符

删除以下容易误导人的结论(或者换一种说法):
但是不能是 on 和 off,因为这两个是关键字,所以,你想输出 on 和 off 是永远不可能的。
1

评分人数

    • Hello123World: 非常精准,学习了,多谢关注。PB + 6 技术 + 1

TOP

返回列表