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

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

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

[ 本帖最后由 yslyxqysl 于 2008-9-29 10:26 编辑 ]

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo ^^!
  4. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

batcher大师,我想问下 ^^是什么东西

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

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

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


[ 本帖最后由 lixiaodaoaaa 于 2008-9-26 21:53 编辑 ]

TOP

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

即所谓的“预处理机制”,前辈们早已讨论透彻,去翻翻老贴
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我还是云里雾里

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

即所谓的 ...

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

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

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

评分人数

TOP

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

[ 本帖最后由 pusofalse 于 2008-9-27 09:50 编辑 ]
1

评分人数

心绪平和,眼藏静谧。

TOP

终于看明白了,

谢谢pusofalse
呵呵,明白了。

TOP

setlocal enabeldayedexpansion
echo  ^^!

TOP

谢谢楼主,我也知道了!

TOP

返回列表