![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 05:22 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [讨论]关于字符串 |
| 可打印版本 3,059 / 5 |
| 第1楼 523066680 | 发表于 2009-01-10 11:12 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
[讨论]关于字符串 文/523066680
blog: http://hi.baidu.com/523066680 首发于:http://www.cn-dos.net/forum/viewthread.php?tid=45654&fpage=1 写这文章的原因: 看了一些关于字符串处理的帖子,觉得方法可以改进。另外,本人的签名... 为了让更多的人看见 所以必须多发文章,而且不能尽是水。 主要内容: 1.抓了几道题目,解题,觉得见得人的就摆上来了。 2.set截取字符串另解 ---------------------------------几道题------------------------------------ 在群里有人问到,如何简单地判断字符串的长度? (我确有另解,只是不通用罢了,于是问问条件) "比如说?" "比如变量值 1 或123 我要判断有几个字符"(ok,简单短小的字符串,我包了) 测试代码1: 可使用的情况: 字符数量在 0~9个的范围 的时候 这个方法是不通用的,但是有的问题本来就简单,何不简单地解决? 所以我提倡:特殊问题,特殊对待。 应用举例:可以判断某9位以内 数字位数; 00N式重命名的时候,判断位数并补适当位数的零 顺便贴一个 按文件个数批量00N重命名 的例子吧,思路不全同,但类似 不小心发现 包括上面和好多 BatchRen都有的一个bug ~ dir会把名字排序并列出,但是... 比如存在 0.jpg 1.jpg 第一次ren 0.jpg 为1.jpg 时...就会出错. 这里不讨论这个了.(临时对策,先ren *.jpg *.jpg# 然后再for逐个ren "xx.jpg#" "编号.jpg") (下面只贴了标题,没有链接sorry 我是单机用户,在精华帖2008看到以下内容.....) 标题: 如何检查一字符串中相同字符的个数 -------------------------------------------------------------------------------- 作者: huahua0919 时间: 2008-4-12 19:13 标题: 如何检查一字符串中相同字符的个数 set string=aferefwfwerergrgreaaffwafwa 用bat怎么检查以上字符串中字符a出现的次数(可不能用字符截取功能) 重新看下, 超级郁闷。。。。。。原来最后追的帖 思路和我的一样,怎么没人回复?我觉得比上面楼的简洁哟... 下面的我也想到的...思路一样的...code 老掉牙了...刚混混的时候被bat-zw来个测试,将一歌词本内容居中,里面都英文字符,如下
保存为 lyric.txt 想了好久... 想到玩特效的时候用的一些把戏,用得上! 思路分析下,假设 单行字符个数 在80以内,往后补80空格,再抓前80个,排去字符串,剩下后面空格, (字符串与后补空格又区分开来) 将空格两个变成一个,然后移到字符串前面,就居中拉......(咔咔,联想到俺 中间变大变小+同步变色的方框.bat) 通用的....感觉找vbs更适合 看看上面也才抓了3道题,感觉好空虚... ------以下是set截取字符串另解------仅供参考,感觉思路被混淆者请绕开----- 关于截取字符,help的解释,我困惑了很久(现在还勉强理解),于是决定尝试--用另一种方式描述 set 截取变量所产生的结果. (把保留,剔除,正负数的结果区分开来) (我很早就在群发过以下内容,如果在别的帖子见过,怀疑我,没关系,我是一个提倡者.) ====================以下以另一种方式描述,仅供参考==================== 对于 %str:~n,m% ~代表省略 后面的那个数字代表: 省略后,剩下的字符串被保留的个数。若值为负则需计算. 不管是省略还是保留,指的都是前面的字符: -----规律------%a:~n,m% , -----规律------%a:~-n,-m% 剩下 n 个 这样说仍然是不易于想像的,以下给出例子: - - - -例子:set a=123456789 共9个字符- - - - - 若出现-n的情况,则实际操作数 = 现有字符数-n 1. echo,%a:~0,5% (前面不省略) 保留前 5个 2. echo,%a:~0,-5% (前面不省略) 保留前 4个 (9-5=4) 3. echo,%a:~5% 省略前5个,剩下的保留 4. echo,%a:~-5% 省略前 4 个,剩下的保留 (剩下后5个) 5. echo,%a:~-3,2% 省略前 6 个(剩后3个:789) 剩下的再保留前2个 6. echo,%a:~-5,-3% 省略前 4 个(剩后5个:56789) ,剩下的再保留前5-3=2个, 结果显示56 7. echo %a:~1,1% 这个不用说...... - - - - - - - - - - - - - - - - - - - - - - - - 一般的说,为了避免混淆,习惯上会倾向于只使用某种形式,像我刚入门的时候尽量避免 - 号 先在则是常用了. 看上面 4. 的注释 因为省略前 总数-n 个,所以剩下的就是n个,是后面的n个. 所以 ~-n 可以方便的理解为: 保留后面n个 所以如果我要获得%time%的最后两个数字,就用%time:~-2% 而不是算一下%time%一共有几个符号,然后 %time:~9% ~-n 的优点体现在, 可以轻松获得 未知长度字符串的后n位字符. 在一些情况下适当的使用,就不用 计算字符串字符个数 啦。 ------------------------------仅供参考----------------------------- 这里基本用统一方式描述了不同处理结果.尽管个别例子可用更简单的方式描述,但统一一些更重要, 所以上面的例子统一用一种规则描述,思考起来不易混淆。 ---------------------------- 练习也是重要的,随便说几个吧 set str=未知字符串大概十几个字符 1.获取该未知字符串的后3个字符 2.一句echo实现--显示该未知字符串的后3个字符的前两个 3.一句echo实现--显示该未知字符串的结果 算了,手痒,第3道,echo,%str:~5,-5% 可以试用上面的计算法则分析 [ Last edited by 523066680 on 2009-1-14 at 09:58 ] |
|
| 第2楼 523066680 | 发表于 2009-01-10 11:13 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
又翻了下精华帖,原来我错过了这么多好东西,顺便把标题链接贴上来....
------------------------------------------------------------- 如何判断变量的长度?? 原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=24745 --------------------------------------------------------------- 如何获得字符的字数和截取字符 原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=28571 --------------------------------------------------------------- [精彩][批处理字符出现次数统计] 原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=25182 类似的一个 如何统计某个字符串在文本中出现的次数? 原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=21250 --------------------------------------------------------------- 又抓到一个帖子了,标题: 如何验证输入的字符串包含双字节字符 (精华帖2008 看到的,我单机用户,没抓到链接) --------------------------------------------------------------- 标题: 优化一下计算字符串长度的代码,谢谢! --------------------------------------------------------------- |
|
| 第3楼 linee | 发表于 2009-01-10 14:58 |
| 初级用户 发帖 49 积分 94 | |
|
的特殊解决可扩展到16个字符,^_^
|
|
| 第4楼 523066680 | 发表于 2009-01-10 15:02 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
可惜我没分加了哦 我做过别的扩展,只是句子就变长了
因为不通用,有没有别的前辈的好 就没发, |
|
| 第5楼 HAT | 发表于 2009-01-10 15:51 |
| 版主 发帖 5,017 积分 9,023 | |
|
建议在帖子标题中增加一下利于搜索的关键字
|
|
| 第6楼 523066680 | 发表于 2009-01-14 10:01 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
虽然是偏方,不过还是发上来了 ,40个字符
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |