批处理之家's Archiver

Hello123World 发表于 2011-8-28 15:01

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

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


帮助信息:[code]显示信息,或将命令回显打开或关上。

  ECHO [ON | OFF]
  ECHO [message]

要显示当前回显设置,键入不带参数的 ECHO。[/code]命令概括:
echo,全英文echo,意为:回音,反射;这里可以引申为回显。


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

先看第一种:[code]ECHO [ON | OFF]
[/code]这种语法,意思是“将命令回显打开或关上”。
echo off 常出现在批处理文件的首行,而且还稍有不同,多了个@
例如:[code]@Echo Off
net user
Pause>Nul[/code]效果:[code]\\HELLOWORLD-PC 的用户帐户

-------------------------------------------------------------------------------
       Administrator            Guest
命令成功完成。[/code]为什么都在首行加上这条语句呢?
echo off是什么意思?
前面加上@又是为什么?

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


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

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

不在行首加echo off。
例如:[code]net user
Pause>Nul[/code]效果:[code]C:\Users\helloworld\Desktop>net user

\\HELLOWORLD-PC 的用户帐户

-------------------------------------------------------------------------------
        Administrator            Guest
命令成功完成。


C:\Users\helloworld\Desktop>Pause1>Nul[/code]看出差别来了吗?
不关闭回显,net user命令 pause >nul都回显了出来,这在程序运行时会影响结果的美观度,所以大家一般在行首加上echo off。



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

还是举例来说明。
例如:[code]echo off
net user
Pause>Nul[/code]效果:[code]C:\Users\helloworld\Desktop>echo off

\\HELLOWORLD-PC 的用户帐户

-------------------------------------------------------------------------------
        Administrator            Guest
命令成功完成。[/code]net user命令 pause >nul都没有回显了出来,但是Echo off却显示出来了。

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

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


第二种语法:
ECHO [message]


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

message可以是任意的字符,但是不能是 on 和 off,因为这两个是关键字,所以,你想输出 on 和 off ,必须用逗号等命令分隔符代替默认的空格分隔符。
例如:[code]C:\Users\helloworld\Desktop>echo,on
on

C:\Users\helloworld\Desktop>echo,off
off[/code]例如:[code]@echo off
echo 慷慨歌燕市,从容作楚囚。
echo 引刀成一快,不负少年头。
echo “曲线救国”的汪精卫都能做出这样的诗,我辈怎敢不自勉。
echo off
echo on
Pause>Nul[/code]扩展阅读:
1.用echo输出空行。[code]@echo off
echo.
echo 慷慨歌燕市,从容作楚囚。
echo;
echo 引刀成一快,不负少年头。
echo\
echo “曲线救国”的汪精卫都能做出这样的诗,我辈怎敢不自勉。
echo/
echo hello
echo,
pause
[/code]参考:echo命令耗时对比
[url]http://bbs.bathome.net/thread-4482-1-1.html#pid28940[/url]

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

例如:[code]echo hello >c:\1.txt
start 1.txt[/code]在c盘根目录创建一个内容为hello的1.txt


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

我做了一工具,就是利用了这一特性。
例如:
[url=http://bbs.bathome.net/thread-13448-1-1.html]批处理实现-以网页套图形式浏览当前文件夹中的图片[/url]


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

CUer 发表于 2011-8-28 15:16

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

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

zaixinxiangnian 发表于 2011-8-28 16:57

继续学习
继续支持

cjiabing 发表于 2011-8-28 17:49

echo后面的分隔符论坛里讲述,通常会用到以下几种(我印象的你自己试验):
echo;Hello
echo.Hello
echo,hello
……
为什么这样?区别以下看看:
for %%a in (1  a  %Var%  你好)  do echo;%%a&echo  %%a

zaixinxiangnian 发表于 2011-8-29 10:32

[i=s] 本帖最后由 zaixinxiangnian 于 2011-8-29 10:35 编辑 [/i]

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

Hello123World 发表于 2011-8-29 11:17

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=90889&ptid=13860]5#[/url] [i]zaixinxiangnian[/i] [/b]


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

这里是空格。

Batcher 发表于 2020-10-29 22:47

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

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

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

解决的方法之一是把重定向符号写在前面:[code]>test.txt  echo bbs
>>test.txt echo 1
>>test.txt echo bathome
>>test.txt echo 2
>>test.txt echo net
>>test.txt echo 3[/code]可以进一步改进的地方是,加上括号,一是可以避免重复写那么多遍文件名,而是可以提高代码执行速度:[code](echo bbs
echo 1
echo bathome
echo 2
echo net
echo 3
)>test.txt[/code]如果遇到包含很多特殊字符的文本,可以参考这篇文章里面 findstr + more 的方法来写入文件:
[url]https://mp.weixin.qq.com/s/McvY4CiR-SYGaCha7lmjIw[/url]

qixiaobin0715 发表于 2020-10-30 10:46

谢谢!这个方法很有用。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.