标题: [原创] 批处理代码解读 变量截取、变量延迟及特殊符号 [打印本页]
作者: 小勇12 时间: 2009-8-11 03:06 标题: 批处理代码解读 变量截取、变量延迟及特殊符号
变量截取、变量延迟及特殊符号的一个高级综合应用实例
http://www.bathome.net/thread-2286-1-8.html
高手略过- @color 0a&set,=0123456&set/=青天有月来几时 我今停杯一问之 人攀明月不可得 月行却与人相随
- @for /l,%%a,in,(1,1,28)do,@set/a?=1/(6/\)2>nul||(set\=0&echo\&echo\&call,call,set/=%%%%/:~%%]%%%%%%&set]=8)&call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%%<nul&set/a\+=1&ping/n 2 127.1>nul
复制代码
改写成如下:- @echo off
- color 0a
- set,=0123456
- set/=青天有月来几时 我今停杯一问之 人攀明月不可得 月行却与人相随
- for /l %%a in (1 1 28) do set/a ?=1/(6/\) 2>nul||(
- set \=0
- echo\&echo\
- call,call,set/=%%%%/:~%%]%%%%%%
- rem call echo %%/%%
- rem call echo %%]%%
- set]=8
- )&call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%<nul&set/a\+=1&ping/n2 127.1>nul
复制代码
解释分析:
表达式 set/a ?=1/(6/\) 当\变量不为空时, 这个set /a 才成立。这个表达式中“/”都表示除法- @echo off
- set /a ?=1/(1/p)
- set /a f=1*p
- echo %f%
- pause>nul
复制代码
当表达中使用未定义变量,其默认值为0。(算术表达式语句中)
因为第一次循环set/a ?=1/(6/\)的“\”未定义,所以默认值为0。但是0不能作为除数。所以会发生错误。
因此会执行(set \=0 echo\&echo\ call,call,set/=%%%%/:~%%]%%%%%% call echo %%/%% set]=8 )
并且执行call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%%<nul&set/a \+=1&ping/n 2 127.1>nul
第一次循环后,“\”的值已经不再为0。所以第二次循环set/a ?=1/(6/\) 不会报错,就会跳过执行
(set \=0 echo\&echo\ call,call,set/=%%%%/:~%%]%%%%%% call echo %%/%% set]=8 )
直接执行call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%%<nul&set/a \+=1&ping/n 2 127.1>nul ,当“\”为7时1/(6/7)中的(6/7)=0,又会导致报错。以后分析同上
call echo %%]%% 第一次进入(。。。)时变量]没有定义就是使用,所以值为空。
call,call,set/=%%%%/:~%%]%%%%%% 相当于没有截取。 “/”=青天有月来几时 我今停杯一问之 人攀明月不可得 月行却与人相随
call echo %%]%% 第二次进入(。。。)时变量]为8
“/”=我今停杯一问之 人攀明月不可得 月行却与人相随
call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%%<nul
内层 %%%%,:~%%\%%,1%%%% 从字符串0123456中截取第%\%位
外层 同理
连接两个命令,当||前的命令失败时,才执行||后的命令。
连接两个命令,当&&前的命令成功时,才执行&&后的命令。
此bat将||与&&用得非常妙!并且对call 进行变量延迟用到了至极。
call,call,call,set/p= %%%%%%%%/:~%%%%,:~%%\%%,1%%%%,1%%%%%%%%<nul
此语句用的相当漂亮。应该称为变量截取嵌套,最终实现输出。
首先在此感谢batman,谢谢他的提醒!
作者: januapr 时间: 2009-8-12 14:47
水平有限,看得头都痛!!无奈!
作者: 基拉freedom 时间: 2009-8-20 10:20
我承认我的头很疼 用特殊符号来赋值 看着就晕.....还用call来脱百分号 更晕了....呼呼
我要耐心 再看一遍..
作者: wychun 时间: 2009-10-4 18:57
好好学习,天天向上!!!!!!!!!!1
作者: GUGEWANG 时间: 2009-11-27 18:54
内容t+ttttttttttttttttt
作者: jackmux 时间: 2012-6-3 11:44
那么多人 不懂啊 那我真的个更不懂了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |