- @echo off
- setlocal EnableDelayedExpansion
- echo.
- echo 变量延迟中的叹号规则小结
- echo.
- echo 1、变量延迟下的叹号如果是中文状态,它将被当做字符串显示——问问美国人去!~
- echo 2、变量延迟下的叹号如果是英文状态,它将取代正常状态下的百分号 %% 来界定变量。
- echo 3、单个叹号将被直接忽略掉。
- echo 4、紧邻的两个叹号被定义为变量,叹号连同叹号之间的内容将被忽略掉。
- echo 5、P定义两个叹号为一个变量是将从左向右、紧邻、不重叠的一对叹号界定为变量的。
- echo 6、两对变量之间的字符串因为未被定义为变量而当做字符串显示。
- echo 7、取消变量延迟中的叹号作为变量界定需要用转义符 ^ 。
- echo 8、将叹号从变量界定转换为字符串需要用两个转义符 ^^ ^^ 增强(原因?)
- echo 9、变量延迟中的叹号的意义:可以利用此规则取消文档中的英文叹号。
- echo 10、如果需要保留变量延迟中的英文叹号,请参照下面的例子。
- echo.
- echo ^^!
- echo ——直接在叹号前面用两个转义符 ^^^^ ^^^^ 。
- echo.
- echo ^^!手中有粮^^! ^^^^^^^^ ^^! ^^!心中不慌^^!
- echo ——在两对变量叹号中间添加一个带两个转义符的叹号。
- ::实际上是这样写的: echo !手中有粮! ^^! !心中不慌!
- ::中间那个带两个转义符的叹号才能正确显示出来。
- echo.
- echo.
- echo 以上内容直接运行来看即可,后面的内容需要一边运行一边看代码。 下面是试验过程:
- echo.
- pause
- echo.
- echo.
- echo Hello!
- ::这样打出来的叹号会被忽略掉。
- echo !Hello!
- ::这样符号变量延迟的格式要求,没有显示。
- echo !Hello! !Hello! !Hello!
- ::以上同样符号要求,此时的叹号并非用作字符串,而是用作命令界定,没有显示。
- echo !Hello! Tom !Hello! !Hello!
- ::我们在两个延迟变量中间加上一个Tom,结果它把这个Tom显示出来了。
- echo OK? !Hello! Tom !Hello! BeJing !Hello! Nihao
- ::都显示出来了
- echo !Hello! Tom! !BeJing! !Nihao!
- ::在Tom后面加了一个叹号,打乱了原来的规则,显示TomBeJingNihao。
- ::意味着第一对叹号是Hello,被忽略掉了。
- ::第二对是Tom后面,BeJing前面的两个叹号,它们同样被忽略掉了。
- ::第三对是BeJing后面,Nihao前面的两个叹号,它们同样被忽略掉了。
- ::最后一个叹号它并非显示字符串,在变量延迟下同样被忽略掉。
- ::这样,在三队叹号之间的字符串TomBeJingNihao就被显示出来了。
- echo Hello Tom^!
- ::取消字符的命令意义我们通常用 ^ ,而通常一个 ^ 是不够的。
- echo Hello Tom^^!
- ::必须用两个 ^ 才能将叹号转换为可显示的字符串。
- echo Nihao^^! Beijing^^!
- ::虽然存在两个叹号,但叹号已经被成功转义了,所以Beijing并未被忽略掉。
- echo Nihao^! Beijing^!
- ::可见转义符 ^ 在变量延迟里一样有效,不过它需要两个 ^ 来增强而已。
- echo.
- echo.
- echo 下面做练习:请猜猜下面的命令将显示什么?
- echo.
- echo ^^!垃圾,你给我出来^^!
- ::终于正确显示了
- echo.
- pause
- echo.
- echo ^^!SB!你藏里面做什么^^!
- ::只看见SB和它前面的!
- echo.
- pause
- echo.
- echo ^^!上帝^!什么时候我也能彻底隐身^!没人能找到我的!!IP!!就好咯^^!
- ::只有“!上帝没人能找到我的”
- echo.
- pause
- echo.
- echo !昨天!!我在马路边!!捡到!!!一分钱!!!真的吗?!是啊!!不骗你的!!!
- echo.
- pause
复制代码
|