标题: [其他] 【已解决】在变量延迟打开的情况下如何输出感叹号 [打印本页]
作者: yslyxqysl 时间: 2008-9-26 21:08 标题: 【已解决】在变量延迟打开的情况下如何输出感叹号
在变量延迟打开的情况下,如何输出"!"???
[ 本帖最后由 yslyxqysl 于 2008-9-29 10:26 编辑 ]
作者: Batcher 时间: 2008-9-26 21:40
- @echo off
- setlocal enabledelayedexpansion
- echo ^^!
- pause
复制代码
作者: lixiaodaoaaa 时间: 2008-9-26 21:52 标题: batcher大师,我想问下 ^^是什么东西
我知道^的意思是取消特殊字符的意思,那^^的意思是什么呀?
请告诉我啊?
当我运行- setlocal enabeldayedexpansion
- echo !
复制代码
出现 echo处于关闭状态,为什么啊?
为什么
- setlocal enabeldayedexpansion
- 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 ^!,由于启用了变量延迟,而该语句含有敏感字符!,执行到该语句时要再处理一次,^将!转义成普通字符,结果就输出!
即所谓的 ...
既然,^将!转义成普通字符,结果就输出!
为什么要两个^ ??
一个已经将起转换成普通字符了!那要两个 “^”起什么作用。解释下。
- setlocal enabeldayedexpansion
- 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 |