[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 介绍一位朋友-批处理defined命令

本帖最后由 batman 于 2011-6-22 20:34 编辑

今天我想跟大家来介绍一位朋友,相信对它大家都会很熟悉并感到很亲切
,那么他是谁呢?它究竟会是谁呢?不好意思,先在这里卖个关子,我们还是
来看下面这段代码:
  1. @echo off
  2. for /l %%a in (1,1,10) do if not defined flag echo %%a&set "flag=a"
  3. 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的工作程序吧,先还是来看一段代码:
  1. @echo off
  2. for /l %%a in (11,1,30) do set "_%%a=a"
  3. for /l %%a in (1,1,40) do if defined _%%a echo %%a
  4. pause>nul
复制代码
前来观看电影的同志请注意了,前来观看电影的同志请注意了,灾难巨
片《2012》马上就要开始了,请大家排好队检票入场了。“怎么办,我没买到
咱们的票”1对它的9位兄弟(2-10)说,“急啥子哦,郎个列么多人,不晓得
混进去哦”(我靠8怎么是四川的)“对,一起混进去,走”。“站住!请出
示你们的票(set _*=a),没有,那对不起了,请别挡着其他人入场。”带着
红绣章的defined很负责任地将1-10拦住了。。。
    是不是没有defined,1-10可就混进去了哦,现在大家明白defined是怎么
工作的了吧。“睢,爷是有工作的,不像你小子整个一盲流”defined得意地数
落起flag,“算了吧,你小子当心哪天翻了船,哼”flag也没有好气。你们俩
能消停会吗?对了,defiend下面又有工作要做,看你的了。“的,您就睢我
的吧”defined也没再理会flag了:
  1. @echo off
  2. set "t t=a"
  3. if defined t t echo yes
  4. pause>nul
复制代码
“defined你是怎么搞的!,这点小事都做不好”cmd火气冲天。“我。。
。”“哈哈,才说的就翻了,看你小子能的”flag兴灾乐祸手舞足蹈。cmd你
也别怪defined,它也是心有余而力不足啊,它和空格天生就是死敌,当变量
中有空格时,它就没有这个检测能力了,要怪就怪写代码的人是个猪。我靠!
这不是在骂我自己啊,呸呸,睢我这张嘴。。。
    那这时我们找谁来检测变量是否被定义了啊?别急if兄可是神通广大:
  1. @echo off
  2. set "t t=a"
  3. if "%t t%" neq "" echo yes
  4. pause>nul
复制代码
是的吧,我没说错吧(“谁叫哥是神嘛”if也沾沾自喜了)。好了,相信
到了这里,大家都基本明白defined的性格和脾气了,只要你们在恰当的时候
用上它,它肯定能帮上你的大忙的,你常用它,它就会变成你的好朋友的。(
我爱张学友,我爱张学友,张学友,我一生一世跟你走。。。),大家瞧见不
又一追星疯子,唉,他爱谁谁去吧,我们只爱defined。“也!!!”defined
差点没高兴得从五楼摔下去。。。
***共同提高***

回复 18# cjiabing


    恩哼,我后来找了一些资料,看懂了defined的用法。但是LZ写得这种风格的我还真是看不大懂了,呵。

TOP

回复 17# hacker85

用心看就懂了》
  1. @echo off
  2. set var=我有一个苹果
  3. if defined var echo;他说他有一个苹果
  4. pause
  5. set var=
  6. if defined var echo;他什么都没说
  7. pause
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

这文章写得……什么都没看懂。

TOP

to all:
已经将丢了的字符补上了,谢谢提醒。。。
***共同提高***

TOP

9# wc726842270


学习学习,测试了一下,连10楼12楼的问题一起解决,
看下面代码结果:
  1. @echo off
  2. for /l %%a in (1,1,5) do set "_%%a= "
  3. for /l %%a in (6,1,10) do set "_%%a="
  4. for /l %%a in (11,1,30) do set "_%%a=a"
  5. for /l %%a in (1,1,40) do if defined _%%a echo %%a
  6. pause>nul
复制代码
可以看出对没使用过的函数或被赋于空值的不会显示,
12楼的问题 是少了一个/l 是楼主的少写了。
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

我晕,没想到batman老大还有这文笔,太好笑了.呵呵

TOP

哈哈 楼主技术好 讲故事也好听啊
读尽天下好书,掌握前沿知识。

TOP

  1. @echo off
  2. for / %%a in (11,1,30) do set "_%%a=a"
  3. for /l %%a in (1,1,40) do if defined _%%a echo %%a
  4. pause>nul
复制代码
这段代码怎么不能执行呢,屏幕一闪就过去了,请赐教!
智慧是创造财富的唯一保障!

TOP

学习一下了,呵呵,希望有帮助

TOP

batman兄:
  请教个小问题,
set "a="
if defined a (echo yes) else echo no
检测不到A的值时,并不运行else语句,这是为何?
萍水相逢,你却给我那么多。
每当孤独我回首,你的爱总在不远的地方等着我...

TOP

没有正经接触过这个命令。defined是不是检测变量是否被使用啊

TOP

还真的没有留意过这个命令

TOP

batman 寫批次檔叻就很多人都知哦~想不到連寫文章都可以這麼有趣呢!
我是個菜鳥呀,又學到東西了!
真是衷心感謝"

TOP

@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

TOP

返回列表