Board logo

标题: [其他] 【已解决】在变量延迟打开的情况下如何输出感叹号 [打印本页]

作者: yslyxqysl    时间: 2008-9-26 21:08     标题: 【已解决】在变量延迟打开的情况下如何输出感叹号

在变量延迟打开的情况下,如何输出"!"???

[ 本帖最后由 yslyxqysl 于 2008-9-29 10:26 编辑 ]
作者: Batcher    时间: 2008-9-26 21:40

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo ^^!
  4. pause
复制代码

作者: lixiaodaoaaa    时间: 2008-9-26 21:52     标题: batcher大师,我想问下 ^^是什么东西

我知道^的意思是取消特殊字符的意思,那^^的意思是什么呀?
请告诉我啊?

当我运行
  1. setlocal enabeldayedexpansion
  2. echo !
复制代码
出现 echo处于关闭状态,为什么啊?
为什么

  1. setlocal enabeldayedexpansion
  2. echo  ^^!
复制代码
echo ^^ 就出现那个符号啊?
大家讨论下,谢谢了,谢谢了batcher


[ 本帖最后由 lixiaodaoaaa 于 2008-9-26 21:53 编辑 ]
作者: zqz0012005    时间: 2008-9-26 22:39

命令解释器(当然一般就是CMD了)读取批处理文件时预处理一次,^对自己转义,变成了echo ^!,由于启用了变量延迟,而该语句含有敏感字符!,执行到该语句时要再处理一次,^将!转义成普通字符,结果就输出!

即所谓的“预处理机制”,前辈们早已讨论透彻,去翻翻老贴
作者: lixiaodaoaaa    时间: 2008-9-27 08:59     标题: 我还是云里雾里

原帖由 zqz0012005 于 2008-9-26 22:39 发表
命令解释器(当然一般就是CMD了)读取批处理文件时预处理一次,^对自己转义,变成了echo ^!,由于启用了变量延迟,而该语句含有敏感字符!,执行到该语句时要再处理一次,^将!转义成普通字符,结果就输出!

即所谓的 ...

既然,^将!转义成普通字符,结果就输出!
为什么要两个^ ??

一个已经将起转换成普通字符了!那要两个 “^”起什么作用。解释下。
  1. setlocal enabeldayedexpansion
  2. echo    ^!
复制代码

这样也会报错,为什么汗。。。。。。。。。。
我说的是为什么要两个^
到底是为什么,

作者: pusofalse    时间: 2008-9-27 09:46

^^!
可以理解为第一次预处理时,!只是一个普通字符,,^^会脱去一个,第一个^转义第二个^。有第二次预处理是因为开启了延迟,会把第一次预处理留下的^当作转义字符,用来转义!。简单来说就是,第一次预处理,!只是普通字符,第二次预处理,!变成了特殊字符。
如下:
未开启延迟: 预处理1
开启延迟  : 预处理1、预处理2。
“预处理1”----在每个开启延迟的,或未开启延迟的批处理中,都会进行,在两个模式中,“预处理1”的运行机制是完全一样的。
只需记住,!只有在开启了延迟之后,才算特殊字符,第一次预处理时,!仅是一个普通字符,有第二次预处理,是因为开启了延迟。

[ 本帖最后由 pusofalse 于 2008-9-27 09:50 编辑 ]
作者: lixiaodaoaaa    时间: 2008-9-27 10:30     标题: 终于看明白了,

谢谢pusofalse
呵呵,明白了。
作者: gfwlxx    时间: 2008-9-28 02:40

setlocal enabeldayedexpansion
echo  ^^!
作者: sjzong    时间: 2009-4-13 23:12

谢谢楼主,我也知道了!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2