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

回复 5# Hello123World


这里有解释:

        可能我没有说清楚....
原来没加^的话,hello后面有回车和换行两个字符(\r\n ...
abcdshenji 发表于 2011-8-15 22:51 [/quote]
  1. @echo off
  2. echo a^
  3. ^
  4. b^
  5. ^
  6. c
  7. pause>nul
复制代码
结果:
  1. a
  2. b
  3. c
复制代码
1

评分人数

TOP

本帖最后由 JooKin 于 2011-9-18 20:37 编辑

回复 12# Hello123World


    可能是abcdshenji笔误,windows系统里正确的应该是换行符在前,回车符在后,即\n\r。unix系统里只有换行符\n。所以应该是:
  1. @echo off\n\r
  2. echo a^\n\r
  3. \n\r
  4. ^\n\r
  5. b^\n\r
  6. \n\r
  7. ^\n\r
  8. c\n\r
  9. pause>nul
复制代码
当第一次^后,转义了换行符,只有回车符起作用,所以接上第3行的\n\r,此时是占据一行的,如果没有碰到第4行的^,结果将是:
  1. a\n\r
  2. \n\r               //这里是第4行的\n\r
复制代码
这个效果就是:
  1. a
复制代码
也就是说,执行完第4行的\n\r的时候是打一个空行,等到执行到第5行b^\n\r的时候,因为前面有了第4行末尾的\n\r,所以cmd就会认为新的命令开始了,这跟cmd以换行回车为一条命令的结束标志是相符的。所以
  1. 'b' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
复制代码
就解释的通了,因为b当然不是什么命令。如果第4行加了^,就跟前面的:
  1. @echo off
  2. echo a^
  3. b^
  4. c
  5. pause>nul
复制代码
同一个道理了,因为加了^之后第4行就没有换行符了,所以就接上第5行的b^\n\r,此时还是占据一行,所以结果就是:
  1. a^\n\r                        //这里是第3行的\n\r
  2. b^\n\r                       //这里原来是第4行,现在第5行的b^\n\r接上去了
复制代码
所以效果就是:
  1. a
  2. b
复制代码
首先你要明白的就是换行符负责把字符串向下移一行,回车符负责把开始打印的位置放到字符串的开头

TOP

本帖最后由 JooKin 于 2011-9-19 20:43 编辑

回复 14# Hello123World


    不是的,执行完第3行(严格来说应该是第2行,因为^的存在原来的第3行已经接上第2行的末尾成为一行了)已经结束了。看下面的两个例子就明白了:
  1. ::例1
  2. @echo off
  3. echo Hey,Hello123World!
  4. pause
复制代码
结果:
  1. Hey,Hello123World!
  2. 请按任意键继续. . .
复制代码
  1. ::例2
  2. @echo off
  3. echo Hey,Hello123World!^
  4. pause
复制代码
结果:
  1. Hey,Hello123World!
  2. 请按任意键继续. . .
复制代码
第2个例子只是在第2行末尾加了个^,为什么结果会多一个空行?因为加了^后,第3行的\n\r接上了第2行的末尾,跟第2行成为1行了,此时的第3行的位置已经是原来第4行的\n\r了。这个时候执行完第2行,因为末尾有原来的第三行的\n\r,所以到此就结束了。接下来就轮到执行第3行的内容了,并且是另起一行(这个应该不用解释了,因为上一行有\n存在),但是因为第3行只有\n\r(原来第4行的\n\r)了,没有任何命令,所以造成的结果就是执行第4行的pause的时候又另起一行了,很明显是因为第3行的\n的缘故,所有整个结果跟第1个例子相比就是中间多出了\n\r(原来第4行的\n\r),即空行。

还有就是连续的多个\n\r只有一个起作用,再结合前面两个例子看:
  1. @echo off
  2. echo Hey,Hello123World!^
  3. pause
复制代码

TOP

返回列表