标题: [文本处理] [讨论]批处理不用转义就输出特殊字符的发现 [打印本页]
作者: mxxcgzxxx 时间: 2011-5-13 11:58 标题: [讨论]批处理不用转义就输出特殊字符的发现
今天尝试了几种方法发现可以不用转义就输出特殊字符,而且很简单,想与大家讨论下!
我们平时都要进行转义才可输出一些特殊的字符,但我今天发现当使用带!号的函数输出不用转义,如果使用%号就会出错!
原先有没有相关的贴子讨论到这个问题?
程序如下,可以尝试各种情况- @echo off
- setlocal enableDelayedExpansion
- :1
- set /p p=
- set a=%p%
- set b=!p!
- set "c=%p%"
- set "d=!p!"
- echo.
- echo p=!p!
- echo a=!a!
- echo b=!b!
- echo c=!c!
- echo d=!d!
-
- pause
- echo p=%p%
- echo a=%a%
- echo b=%b%
- echo c=%c%
- echo d=%d%
-
- pause
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |