标题: [原创] 介绍一位朋友-批处理defined命令 [打印本页]
作者: batman 时间: 2009-11-22 04:04 标题: 介绍一位朋友-批处理defined命令
本帖最后由 batman 于 2011-6-22 20:34 编辑
今天我想跟大家来介绍一位朋友,相信对它大家都会很熟悉并感到很亲切
,那么他是谁呢?它究竟会是谁呢?不好意思,先在这里卖个关子,我们还是
来看下面这段代码:- @echo off
- for /l %%a in (1,1,10) do if not defined flag echo %%a&set "flag=a"
- pause>nul
复制代码
为什么?为什么会这样?的确人生充满了太多的为什么,而且有很多的为
什么是没有答案的。就连小沈阳都学会了“这是为什么呢?”(谁在那里喊下
去!)对不起忍不住小水了下。但请大家相信今天这个为什么是有答案的,是
的,现在就有请我们朋友defined闪亮登场为大家讲讲这又是为什么呢?(旁
白:台上的,那小子已经登过场了。。。)对不起,我错了,一切都是我的错
并不是月亮惹的祸(月亮:本来就不关我的事,那小样张宇#¥%……),下面
的时间就交给defined兄弟了,兄弟看你的了!(闪人)
喂,喂,喂喂,对不起先试下音,大家好我是defined,很高兴见到你们,
怎么不呱叽呱叽一下?(只传来一阵稀拉的都可以听到针掉在地上的掌声)。
呵呵,大家还是蛮热情的嘛(250的笑),其实上面的2-10号兄弟是小可我拦
住了它们露面,那为啥我没拦住1号兄弟呢?嘿嘿。。。下面是谁在说它送钱我
了,是谁?告诉你们不要紧,别说它没送钱给我,就是它送了你们又能拿我怎
么地。(“你太不像话了!再这样,以后甭跟我混了!”if实在看不下了)别
,大哥,没你我什么都不是啊,你就原谅俺这回吧。我向大家坦白,其实1号兄
弟没送钱给我,是因为我看它顺眼,谁叫后面的都带个flag尾巴啊,这小子我
一看到它就有气,所以就拦了所有带它的兄弟了。flag这时急了,冲了上来,
一把抢过话筒(什么?没有话筒,管他有不有),这能怪我吗?我才懒得遇见
你,是cmd非得在一号兄弟过去后把我定义出来,你小子也太黑了,你在那时是
六亲不认啊,别说是我,就是什么a啊b啊阿猫阿狗啊被定义了,只要是在你后
面的,你都不认人了(if not defined a echo %%a&set "a=a"),小样!
行了,你们兄弟俩都给我下去,尽给我添乱!(一顿倒彩喝得好响)对不
起,这两小子没见过世面,大伙看我薄面了(我靠,你也有面子)。其实啊,
defined兄弟的本事真不小哦,大家有没有注意到上面的代码是没有开变量延
迟的,就是这样,它都能发现被定义了的flag,是不是厉害啊。(defined..
defined..defined禁不住为自己呐喊)你小子,给你点彩头你就开染房了,你
可不要忘记了没有if大哥带着你,你狗屎不如哦(defiend再次沉默)。(有
人喊到:都什么乱七八糟的,爷看电影去了)对了,这位提醒了我,我就以看
电影来为大家详细讲讲defined的工作程序吧,先还是来看一段代码:- @echo off
- for /l %%a in (11,1,30) do set "_%%a=a"
- for /l %%a in (1,1,40) do if defined _%%a echo %%a
- pause>nul
复制代码
前来观看电影的同志请注意了,前来观看电影的同志请注意了,灾难巨
片《2012》马上就要开始了,请大家排好队检票入场了。“怎么办,我没买到
咱们的票”1对它的9位兄弟(2-10)说,“急啥子哦,郎个列么多人,不晓得
混进去哦”(我靠8怎么是四川的)“对,一起混进去,走”。“站住!请出
示你们的票(set _*=a),没有,那对不起了,请别挡着其他人入场。”带着
红绣章的defined很负责任地将1-10拦住了。。。
是不是没有defined,1-10可就混进去了哦,现在大家明白defined是怎么
工作的了吧。“睢,爷是有工作的,不像你小子整个一盲流”defined得意地数
落起flag,“算了吧,你小子当心哪天翻了船,哼”flag也没有好气。你们俩
能消停会吗?对了,defiend下面又有工作要做,看你的了。“的,您就睢我
的吧”defined也没再理会flag了:- @echo off
- set "t t=a"
- if defined t t echo yes
- pause>nul
复制代码
“defined你是怎么搞的!,这点小事都做不好”cmd火气冲天。“我。。
。”“哈哈,才说的就翻了,看你小子能的”flag兴灾乐祸手舞足蹈。cmd你
也别怪defined,它也是心有余而力不足啊,它和空格天生就是死敌,当变量
中有空格时,它就没有这个检测能力了,要怪就怪写代码的人是个猪。我靠!
这不是在骂我自己啊,呸呸,睢我这张嘴。。。
那这时我们找谁来检测变量是否被定义了啊?别急if兄可是神通广大:- @echo off
- set "t t=a"
- if "%t t%" neq "" echo yes
- pause>nul
复制代码
是的吧,我没说错吧(“谁叫哥是神嘛”if也沾沾自喜了)。好了,相信
到了这里,大家都基本明白defined的性格和脾气了,只要你们在恰当的时候
用上它,它肯定能帮上你的大忙的,你常用它,它就会变成你的好朋友的。(
我爱张学友,我爱张学友,张学友,我一生一世跟你走。。。),大家瞧见不
又一追星疯子,唉,他爱谁谁去吧,我们只爱defined。“也!!!”defined
差点没高兴得从五楼摔下去。。。
作者: zqz0012005 时间: 2009-11-22 06:14
变量名有空格时可以间接检测- @echo off
- set "t t=a"
- for /f "eol== delims=" %%a in ("t t") do if defined %%a echo yes
- set "var=t t"
- setlocal enableDelayedExpansion
- if defined !var! echo yes
- pause
复制代码
if defined 有几篇文章的讲解,随风还是jm出的。
作者: canyuexiaolang 时间: 2009-11-22 09:16
嗯嗯、讲的很详细,而且有故事情节,很容易掌握
最近正愁于defined的学习,o(∩_∩)o 哈哈~~~~~
==========================================
楼主啊
谢谢!!!
作者: Seter 时间: 2009-11-22 10:19
我还以为介绍DEF....
楼主好幽默啊...佩服佩服嘿嘿嘿
作者: wgoxm521 时间: 2010-2-2 10:37
\(^o^)/~
还真有意思,去写笑话去吧。我捧你的场
作者: ft5126752 时间: 2010-2-7 20:07
@echo off
for / %%a in (11,1,30) do set "_%%a=a"
for /l %%a in (1,1,40) do if defined _%%a echo %%a
pause>nul
这个代码的第二行/后面少了个l
作者: keiamy 时间: 2010-8-21 13:30
batman 寫批次檔叻就很多人都知哦~想不到連寫文章都可以這麼有趣呢!
我是個菜鳥呀,又學到東西了!
真是衷心感謝"
作者: mackyliu 时间: 2010-8-24 18:20
还真的没有留意过这个命令
作者: wc726842270 时间: 2010-9-3 02:05
没有正经接触过这个命令。defined是不是检测变量是否被使用啊
作者: wgoxm521 时间: 2010-10-26 02:53
batman兄:
请教个小问题,
set "a="
if defined a (echo yes) else echo no
检测不到A的值时,并不运行else语句,这是为何?
作者: eriche 时间: 2010-11-18 10:40
学习一下了,呵呵,希望有帮助
作者: andy七少 时间: 2011-5-23 13:33
- @echo off
- for / %%a in (11,1,30) do set "_%%a=a"
- for /l %%a in (1,1,40) do if defined _%%a echo %%a
- pause>nul
复制代码
这段代码怎么不能执行呢,屏幕一闪就过去了,请赐教!
作者: jsbba 时间: 2011-5-25 08:57
哈哈 楼主技术好 讲故事也好听啊
作者: Bearxy 时间: 2011-5-25 22:13
我晕,没想到batman老大还有这文笔,太好笑了.呵呵
作者: mxxcgzxxx 时间: 2011-6-1 13:52
9# wc726842270
学习学习,测试了一下,连10楼12楼的问题一起解决,
看下面代码结果:- @echo off
- for /l %%a in (1,1,5) do set "_%%a= "
- for /l %%a in (6,1,10) do set "_%%a="
- for /l %%a in (11,1,30) do set "_%%a=a"
- for /l %%a in (1,1,40) do if defined _%%a echo %%a
- pause>nul
复制代码
可以看出对没使用过的函数或被赋于空值的不会显示,
12楼的问题 是少了一个/l 是楼主的少写了。
作者: batman 时间: 2011-6-22 20:34
to all:
已经将丢了的字符补上了,谢谢提醒。。。
作者: hacker85 时间: 2012-1-19 22:16
这文章写得……什么都没看懂。
作者: cjiabing 时间: 2012-1-19 23:22
回复 17# hacker85
用心看就懂了》
- @echo off
- set var=我有一个苹果
- if defined var echo;他说他有一个苹果
- pause
- set var=
- if defined var echo;他什么都没说
- pause
复制代码
作者: hacker85 时间: 2012-1-19 23:27
回复 18# cjiabing
恩哼,我后来找了一些资料,看懂了defined的用法。但是LZ写得这种风格的我还真是看不大懂了,呵。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |