中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-29 17:42
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何判断一个变量非空? 查看 1,336 回复 14
楼 主 [已结]如何判断一个变量非空? 发表于 2008-10-09 16:20 ·  中国 江西 吉安 电信
中级用户
★★
积分 253
发帖 112
注册 2006-05-31 11:12
20年会员
UID 56308
性别 男
状态 离线
如下

set NN=
if %NN% == "" (echo 1) else echo 2

set NN=yes
if %NN% == "" (echo 1) else echo 2


无论%NN%是否有值都会显2 !
我的主要目的是判断一个值是否为空
不知错哪了,高手见教一个???

[ Last edited by HAT on 2008-10-13 at 14:00 ]
2 发表于 2008-10-09 16:23 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
检查一下第一个set nn=之后是不是有空格?、、、
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
3 发表于 2008-10-09 16:23 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
set NN=
if "%NN%" == "" (echo 1) else echo 2
4 发表于 2008-10-09 16:35 ·  中国 江西 吉安 电信
中级用户
★★
积分 253
发帖 112
注册 2006-05-31 11:12
20年会员
UID 56308
性别 男
状态 离线
谢谢3楼朋友。又发现个奇怪的事儿
在命令行里输入有不同的效果
附件
cmd.JPG
5 发表于 2008-10-09 17:11 ·  中国 安徽 马鞍山 联通
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
==的前后,不要有空格。
应该是
set NN=
if "%NN%"=="" (echo 1) else echo 2

set NN=yes
if "%NN%"=="" (echo 1) else echo 2
Windows 一键还原
http://www.yjhy.com
6 发表于 2008-10-09 17:23 ·  中国 广东 清远 电信
高级用户
★★★
CMD感染者
积分 691
发帖 383
注册 2008-05-23 00:38
18年会员
UID 119451
性别 男
状态 离线
后面加括号

set NN=
if %NN% == "" (echo 1) else (echo 2)

set NN=yes
if %NN% == "" (echo 1) else (echo 2)
7 发表于 2008-10-10 20:35 ·  中国 浙江 杭州 富阳区 电信
新手上路
积分 3
发帖 2
注册 2007-08-13 17:45
18年会员
UID 95065
性别 男
状态 离线
经过测试应该是这样
set NN=注(这里要有空格)
if "%NN%"==" "注这里引号里要有空格 (echo 1) else echo 2
8 发表于 2008-10-10 20:42 ·  中国 江苏 苏州 电信
初级用户
★★
积分 160
发帖 75
注册 2006-06-28 01:07
20年会员
UID 57661
性别 男
状态 离线
判断变量为空:
if not defined var echo it's empty!
9 发表于 2008-10-11 02:37 ·  中国 广东 韶关 电信
高级用户
★★★
CMD感染者
积分 691
发帖 383
注册 2008-05-23 00:38
18年会员
UID 119451
性别 男
状态 离线
晕!
set NN=
后面竟然有空格
10 发表于 2008-10-11 03:33 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
昨天在群里讨论过。命令提示符中与批处理中的差别。
命令提示符中依次键入:
set "test=a"
if "%test%" equ "a" echo yes
set "test="
if "%test%" equ "" echo yes
第二个不显示yes,说明条件不成立,是因为在命令提示符中,值为空的变量不会是一个变量,而是被当作成一个普通字符串处理。第二个if中的%test%就被当作了6个字符处理。这与直接在CMD中输入echo %abcdefg%(变量abcdefg事先没有定义)不会输出“echo处于打开状态”,而是输出“%abcdefg%”是一样的道理。这种现象只出现在变量值为空的情况下,即:在%%之间的字符串不会被认为是一个变量的标识,也无所谓变量扩展了。

[ Last edited by pusofalse on 2008-10-11 at 03:36 ]
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
11 发表于 2008-10-11 05:09 ·  中国 四川 成都 电信
中级用户
★★
积分 297
发帖 135
注册 2006-10-21 12:00
19年会员
UID 67627
性别 男
状态 离线
居然说昨天才讨论过?我记得很久以前就讨论过
在bat中经常利用不存在的变量构造伪代码,达到迷惑人和免杀效果
bat中一个杀伤力比format还强的命令:%love%r%OOXX%%os:~3,1%%ml%
12 发表于 2008-10-11 05:39 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
cmd下怎么赋值一个变量为空?
49206C6F766520796F752067757973 54656C3A3133383238343036373837
13 发表于 2009-05-04 19:55 ·  中国 湖北 武汉 电信
初级用户
积分 64
发帖 43
注册 2007-11-12 00:57
18年会员
UID 102390
性别 男
状态 离线
cmd下 不行,必须编辑为bat文件运行才行。直接在cmd下 执行批处理命令(比如for )很多是无效的。
14 发表于 2009-05-05 01:54 ·  中国 北京 联通
初级用户
积分 49
发帖 43
注册 2007-01-20 03:28
19年会员
UID 77088
性别 男
状态 离线
::注意下面赋值,等号后面是有空格的
set a=
if not defined a (echo no defined) else (echo "%a%")

执行上面命令得到显示为 " " ,表明赋值a为空,如果想真正赋值为空(nul),cmd变量本身是不允许为空的,空只代表未定义变量。



Originally posted by everest79 at 2008-10-11 05:39:
cmd下怎么赋值一个变量为空?
15 发表于 2009-05-06 04:53 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
19年会员
UID 59720
状态 离线
在批处理中,执行的变量不能不事先设置,负责将无法运行。
论坛跳转: