![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-30 21:19 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何判断一个变量非空? |
| 可打印版本 1,568 / 14 |
| 第1楼 junyee | 发表于 2008-10-09 16:20 |
| 中级用户 发帖 112 积分 253 | |
|
[已结]如何判断一个变量非空? 如下
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楼 pusofalse | 发表于 2008-10-09 16:23 |
| 银牌会员 发帖 646 积分 1,604 | |
|
检查一下第一个set nn=之后是不是有空格?、、、
|
|
| 第3楼 tireless | 发表于 2008-10-09 16:23 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
set NN=
if "%NN%" == "" (echo 1) else echo 2 |
|
| 第4楼 junyee | 发表于 2008-10-09 16:35 |
| 中级用户 发帖 112 积分 253 | |
|
谢谢3楼朋友。又发现个奇怪的事儿
在命令行里输入有不同的效果 附件 cmd.JPG (33.86 KiB) |
|
| 第5楼 lianjiang2004 | 发表于 2008-10-09 17:11 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
==的前后,不要有空格。
应该是 set NN= if "%NN%"=="" (echo 1) else echo 2 set NN=yes if "%NN%"=="" (echo 1) else echo 2 |
|
| 第6楼 radem | 发表于 2008-10-09 17:23 |
| 高级用户 发帖 383 积分 691 | |
|
后面加括号
set NN= if %NN% == "" (echo 1) else (echo 2) set NN=yes if %NN% == "" (echo 1) else (echo 2) |
|
| 第7楼 shadanyige | 发表于 2008-10-10 20:35 |
| 新手上路 发帖 2 积分 3 | |
|
经过测试应该是这样
set NN=注(这里要有空格) if "%NN%"==" "注这里引号里要有空格 (echo 1) else echo 2 |
|
| 第8楼 buddiyar | 发表于 2008-10-10 20:42 |
| 初级用户 发帖 75 积分 160 | |
|
判断变量为空:
if not defined var echo it's empty! |
|
| 第9楼 radem | 发表于 2008-10-11 02:37 |
| 高级用户 发帖 383 积分 691 | |
|
晕!
set NN= 后面竟然有空格 |
|
| 第10楼 pusofalse | 发表于 2008-10-11 03:33 |
| 银牌会员 发帖 646 积分 1,604 | |
|
昨天在群里讨论过。命令提示符中与批处理中的差别。
命令提示符中依次键入: 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 ] |
|
| 第11楼 zqz0012005 | 发表于 2008-10-11 05:09 |
| 中级用户 发帖 135 积分 297 | |
|
居然说昨天才讨论过?我记得很久以前就讨论过
在bat中经常利用不存在的变量构造伪代码,达到迷惑人和免杀效果 bat中一个杀伤力比format还强的命令:%love%r%OOXX%%os:~3,1%%ml% |
|
| 第12楼 everest79 | 发表于 2008-10-11 05:39 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
cmd下怎么赋值一个变量为空?
|
|
| 第13楼 cz1314 | 发表于 2009-05-04 19:55 |
| 初级用户 发帖 43 积分 64 | |
|
cmd下 不行,必须编辑为bat文件运行才行。直接在cmd下 执行批处理命令(比如for )很多是无效的。
|
|
| 第14楼 tongzj | 发表于 2009-05-05 01:54 |
| 初级用户 发帖 43 积分 49 | |
|
::注意下面赋值,等号后面是有空格的
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: |
|
| 第15楼 ZJHJ | 发表于 2009-05-06 04:53 |
| 高级用户 发帖 374 积分 609 | |
|
在批处理中,执行的变量不能不事先设置,负责将无法运行。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |