Board logo

标题: [文本处理] [讨论]批处理不用转义就输出特殊字符的发现 [打印本页]

作者: mxxcgzxxx    时间: 2011-5-13 11:58     标题: [讨论]批处理不用转义就输出特殊字符的发现

今天尝试了几种方法发现可以不用转义就输出特殊字符,而且很简单,想与大家讨论下!

我们平时都要进行转义才可输出一些特殊的字符,但我今天发现当使用带!号的函数输出不用转义,如果使用%号就会出错!
原先有没有相关的贴子讨论到这个问题?
程序如下,可以尝试各种情况
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. :1
  4. set /p p=
  5. set a=%p%
  6. set b=!p!
  7. set "c=%p%"
  8. set "d=!p!"
  9. echo.
  10. echo p=!p!
  11. echo a=!a!
  12. echo b=!b!
  13. echo c=!c!
  14. echo d=!d!
  15. pause
  16. echo p=%p%
  17. echo a=%a%
  18. echo b=%b%
  19. echo c=%c%
  20. echo d=%d%
  21. pause
  22. goto :1
复制代码
我想在定义函数时,是没有区分特殊字符的,函数本身也没有出错,只是显示时出现了特殊代码与程序本身进行了冲突。
而使用!号后进行了延时,特殊代码就不起做用了!
作者: CrLf    时间: 2011-5-13 13:12

当然的了,这是预处理机制的顺序决定的,因为运行bat时是先扩展%str%,再解释语句,再扩展!str!,所以用!str!显示出来的内容不会在解释语句的时候被误解
作者: hanyeguxing    时间: 2011-5-13 14:32

不同的情况要不同对待:
例如,对 for 内的延迟变量a的第一个字符,比较是否大于1,则 if !a:~0^,1! gtr 1 (echo 大于) else echo;小于或等于
例如,在 goto 循环内,则尽量直接使用转义符而不开变量延迟,以提高效率
还有各种情况。。。
作者: mxxcgzxxx    时间: 2011-5-13 20:48

谢谢前辈指点




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