我们现在分析一下例1 , 批处理在运行到这句\”set a=5 & echo %a%\”之前 , 先把这一句整句读取并做了预处理——对变量a赋了值 , 那么%a%当然就是4了!(没有为什么 , 批处理就是这样做的 。)而为了能够感知环境变量的动态变化 , 批处理设计了变量延迟 。简单来说 , 在读取了一条完整的语句之后 , 不立即对该行的变量赋值 , 而会在某个单条语句执行之前再进行赋值 , 也就是说\”延迟\”了对变量的赋值 。那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:例2:@echo offsetlocal enabledelayedexpansionset a=4set a=5 & echo !a!pause 结果:5解说:启动了变量延迟 , 得到了正确答案 。变量延迟的启动语句是\”setlocal enabledelayedexpansion\” , 并且变量要用一对叹号\”!!\”括起来(注意要用英文的叹号) , 否则就没有变量延迟的效果 。
分析一下例2 , 首先\”setlocal enabledelayedexpansion\”开启变量延迟 , 然后\”set a=4\”先给变量a赋值为4 , \”set a=5 & echo !a!\”这句是给变量a赋值为5并输出(由于启动了变量延迟 , 所以批处理能够感知到动态变化 , 即不是先给该行变量赋值 , 而是在运行过程中给变量赋值 , 因此此时a的值就是5了) 。再举一个例子巩固一下 。
例3:@echo offsetlocal enabledelayedexpansionfor /l %%i in (1,1,5) do (set a=%%iecho !a!)pause结果:12345解说:本例开启了变量延迟并用\”!!\”将变量扩起来 , 因此得到我们预期的结果 。如果不用变量延迟会出现什么结果呢?结果是这样的:ECHO 处于关闭状态 。ECHO 处于关闭状态 。ECHO 处于关闭状态 。ECHO 处于关闭状态 。ECHO 处于关闭状态 。即没有感知到for语句中的动态变化 。提示:在没有开启变量延迟的情况下 , 某条命令行中的变量改变 , 必须到下一条命令才能体现 。这一点也可以加以利用 , 看例子 。
例:交换两个变量的值 , 且不用中间变量@echo off::目的:交换两个变量的值 , 但是不使用临时变量::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email]::出处:set var1=abcset var2=123echo 交换前: var1=%var1% var2=%var2%set var1=%var2%& set var2=%var1%echo 交换后: var1=%var1% var2=%var2%pause
17、ATTRIB 显示或更改文件属性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]] + 设置属性 。– 清除属性 。R 只读文件属性 。A 存档文件属性 。S 系统文件属性 。H 隐藏文件属性 。[drive:][path][filename] 指定要处理的文件属性 。/S 处理当前文件夹及其子文件夹中的匹配文件 。/D 也处理文件夹 。
例:md autorunattrib +a +s +h autorun上面的命令将建立文件夹autorun , 然后将其设为存档、系统、隐藏属性
三、批处理的操作符
1、@ 命令行回显屏蔽符
2、% 批处理变量引导符
3、> 重定向符
4、>> 重定向符
5、<、>&、<& 重定向符
6、| 命令管道符
7、^ 转义字符
8、& 组合命令
9、&& 组合命令
10、|| 组合命令
11、\”\” 字符串界定符
12、, 逗号
13、; 分号
14、() 括号
15、! 感叹号
16、批处理中可能会见到的其它特殊标记符: (略)
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符
推荐阅读
- 家里太小,她把花盆堆起来,结果美成这样!
- 水杯垫圈发黄怎么清理污垢,杯子橡胶圈发黄怎么清洗
- 如何教育孩子垃圾要及时清理,小孩乱扔垃圾怎么教育
- 微信怎么清理内存 微信怎么清理
- 桅子花可以放在卧室吗,如果把窗帘关上能吗
- 公司把年假挪到年后需不需要本人同意 蚂蚁新村9.26答案
- 蚂蚁新村小课堂今日答案9月26日 公司要求员工把年假挪到年后再休需要征得本人同意吗
- 大容量水杯怎么调饮料 如何把饮料变大杯
- 水杯垫圈发黄怎么清理干净 水杯垫圈里面脏了怎么清洗
- 水杯垫圈发黄怎么清理 水杯垫圈发黄怎么清理干净