中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 14:00
48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何判断变量的长度??
可打印版本  6,612 / 20
第1楼 luxiaoming2001 发表于 2006-11-15 09:51
新手上路 发帖 5 积分 16
如何判断变量的长度??
set dd=1234
我如何判断dd这个变量的长度??请高手指教
第2楼 namejm 发表于 2006-11-15 10:09
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  以前 willsort 曾经写过这样的代码,发出来你琢磨一下:

  在这个代码的基础上,可以修改为:
第3楼 pengfei 发表于 2006-11-15 10:18
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
其实问题并不像vkill兄说的那样简单, 这不单牵涉到引号配对的问题, 还有诸如控制字符等特殊符号的处理.

经过反复修改下面的代码已经可以处理特殊字符了, 测试暂时没发现错误.



二楼的代码可以不用FOR语句来实现.




[ Last edited by pengfei on 2006-11-20 at 11:10 AM ]
第4楼 lxmxn 发表于 2006-11-15 10:48
版主 发帖 4,938 积分 11,386

  一下就有三种方法了,收藏一下。
第5楼 luxiaoming2001 发表于 2006-11-15 22:49
新手上路 发帖 5 积分 16
谢谢了,我马上去研究下,DOS的这种命令真是深奥啊,感觉没有SHELL的命令简洁
第6楼 vkill 发表于 2006-11-16 03:50
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
我用的也是pengfei兄这样的方法
第7楼 namejm 发表于 2006-11-16 06:45
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  3F的代码也不失为一种好方法,只是因为 if not "%ii%"=="" 语句的限制,处理英文状态下的引号的时候会出错,如果字符串中可能存在英文状态下的引号的话,建议采用2F的代码。
第8楼 vkill 发表于 2006-11-16 07:03
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
Originally posted by namejm at 2006-11-16 06:45:
  3F的代码也不失为一种好方法,只是因为 if not "%ii%"=="" 语句的限制,处理英文状态下的引号的时候会出错,如果字符串中可能存在蠮..

可以换个别的了,像 if not %ii%*==* ,当然也可以换个很特殊的,三种方法其实都是一种思路,呵呵

[ Last edited by vkill on 2006-11-16 at 07:05 AM ]
第9楼 pengfei 发表于 2006-11-20 09:00
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
Originally posted by vkill at 2006-11-16 07:03:

可以换个别的了,像 if not %ii%*==* ,当然也可以换个很特殊的,三种方法其实都是一种思路,呵呵

[ Last edited by vkill on 2006-11-16 at 07:05 AM ]


vkill兄这样处理遇到的问题会更多, 如果输入特殊字符就无法处理了.

其实这个错误是引号配对引起的, 我们可以先去掉引号再来判断, 代码更新在3楼.
第10楼 electronixtar 发表于 2006-11-20 09:23
铂金会员 发帖 2,672 积分 7,493

本人不擅长写批处理,大家多多批评哈
第11楼 pengfei 发表于 2006-11-20 09:54
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
electronixtar兄真不错啊, 想到利用文件大小来判断, 但这样依然存在特殊字符处理的问题. 如果输入管道命令就会出错.
第12楼 redtek 发表于 2006-11-20 10:21
金牌会员 发帖 1,147 积分 2,902
精彩~~
electronixtar兄的这个~z玩得可是真好玩~:)
欣赏!这方法虽 “另类” 但绝对让人眼前一亮~:)

而且写放tmp.bat文件后 “set /a r=%~z0-21” 本身占16个字符,
还有一个首行的 “:” 标签(这样用户输入的内容会被当做标签,哈哈),这个占1个字符,
还有echo写入时的多余的一行回车换行符2个,
和首行写入(所占的回车换行符)2 个,
一共是 21 ,
所以 %~z0(文件自身的长度)还要减去21就是刚被用户所输入的长度~:)
真是精心计算啊~:)

[ Last edited by redtek on 2006-11-19 at 09:27 PM ]
第13楼 wchy2006 发表于 2006-11-20 10:41
新手上路 发帖 1 积分 2 来自 陕西省西安市
请教electronixtar:set /a r=%%~z0-21 是什么意思?
我刚开始学习批处理,对您帖子中的 set /a r=%%~z0-21 这行代码不明白,请指教,多谢拉!
第14楼 electronixtar 发表于 2006-11-20 10:45
铂金会员 发帖 2,672 积分 7,493
其实偶没有考虑那么多。现随便减了个15,发现相差6,于是就减了个21,完毕。并没有精心计算。
第15楼 pengfei 发表于 2006-11-20 10:50
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
利用文件大小判断字符数, 代码改进一下, 可处理特殊字符. 同时, 3楼的代码都已经通用, 目前测试暂时没有发现错误.



[ Last edited by pengfei on 2006-11-20 at 11:07 AM ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023