![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-25 22:39 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结] 批处理菜单对齐问题。。。(即画表格的问题) |
| 可打印版本 1,656 / 13 |
| 第1楼 flyinspace | 发表于 2007-04-23 02:52 |
| 银牌会员 发帖 517 积分 1,206 | |
|
[已结] 批处理菜单对齐问题。。。(即画表格的问题) 各位大侠,大家是否有过如下的经历呢~!
在制作批处理表格的时候,若里面有变量的存在,则这样一个表格在编写的时候总是对不齐的。。因为变量有可能大或小。。 所以,我们在编写表格的时候,总是尽量避免在表格中使用变量,但一个好的批处理,若是因为如此就放弃了在表格中的变量使用,未免有点可惜了。 怕说得不够明白:举个例子。 假设现在有几个变量。 set /p name= set /p add= set /p phone= 我需要在屏幕上画一个表格。。 ┍━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ %name% %phone% ┃ ┃ %add% ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 就如此粗略表示一下,,那么大家在遇到这样的情况下的时候,是如何处理后面的线与上方对齐的问题的呢? 个人有个不成熟的想法。。但在处理中文和非英文的问题上遇到了问题。。 已知:制表格的线占两个字符,汉字占一个字符。英文和各类符号占用一个字符。 若变量全为英文或汉字,则该想法无问题。。 --------------------------------------------------------------------------------------------------------- 1,假设我一行要画37个表格线。就是74个字符的距离。其中表格会用去4个字符。 2,变量所占用的空间,使用 for /l %%i in (0,1,1000) 来获取变量的字符数量。使该字符数不大于35 或 70。 3,然后利用 35 或 70 减去这个数量。获得需要画上的空格数量就得到了表格边线的距离答案。 --------------------------------------------------------------------------------------------------------- 但,经常性的。我们写的变量是由中文+英文的结果。那么这种情况下如何正确的获得该变量的真实字符数。 呵,愿大家一起集思广益。解决这个难题,也愿大家画出比较好看的菜单(表格)出来。 谢谢 youxi01 ,lxmxn 。让我学到了新的知识。。 一个取文件大小,一个字符判断,(对assic修改一下估计就没有问题了) [ Last edited by flyinspace on 2007-4-22 at 06:12 PM ] |
|
| 第2楼 youxi01 | 发表于 2007-04-23 04:47 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
对于中英文 结合的 变量的对齐,我们一般采用的做法当然是先要取得该变量的总字节数(这个工作一般由vbs来完成,当然 willsort似乎也写过用P处理的),然后再来对齐。
以下程序也用纯批处理来获取字节,不过在此没考虑特殊字符。原理很简单:如果某字符 大于 “Z” ,则认为它为汉字(同样,不处理特殊字符)。 欢迎测试,指正。 测试结果如下: 将前面的内容,再换掉,测试如下: |
|
| 第3楼 lxmxn | 发表于 2007-04-23 05:04 |
| 版主 发帖 4,938 积分 11,386 | |
|
按照兄的要求写的,可自行修改。
也请大家测试。 [ Last edited by lxmxn on 2007-4-22 at 04:39 PM ] 附件 BatchMemu.JPG (27.09 KiB) |
|
| 第4楼 bjsh | 发表于 2007-04-23 05:33 |
| 银牌会员 发帖 621 积分 2,000 | |
|
lxmxn兄写的漂亮就是空格还是不够长;再加长点;
你的试试:姓名:1电话:1地址:1;会出现异常;加长space; |
|
| 第5楼 lxmxn | 发表于 2007-04-23 05:39 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re bjsh:
多谢兄测试指出不足。代码已修正。 [ Last edited by lxmxn on 2007-4-22 at 04:41 PM ] |
|
| 第6楼 flyinspace | 发表于 2007-04-23 07:07 |
| 银牌会员 发帖 517 积分 1,206 | |
|
谢谢二楼和三楼的方案。。收益非浅。。
二楼的算法思想是:判断字符是否大于二。 而三楼的则是写入文件。。 在此有个问题。。 >temp.tem<nul set/p=%string% 这个 写日文件方案可以解释一下么?? 不知道原来还可以这样用的。 |
|
| 第7楼 bjsh | 发表于 2007-04-23 07:27 |
| 银牌会员 发帖 621 积分 2,000 | |
|
>temp.tem<nul set/p=%string%
相当于 set /p=%sring% <nul >temp.tem set /p=%sring% <nul 这个是 在控制台上输出 %string%; 定向到temp.tem 不换行; 通常 set /p 变量名=提示字符串: 来获取输入;在这里用<nul来赋予一个空字符串; 效果就是屏蔽用户输入;只显示提示字符串;常用来输出不换行;此时变量名可省 [ Last edited by bjsh on 2007-4-22 at 06:29 PM ] |
|
| 第8楼 bjsh | 发表于 2007-04-23 07:29 |
| 银牌会员 发帖 621 积分 2,000 | |
|
lxmxn兄就是利用这个把不含回车符的字符串重定向到文件;
再利用%~za来获取字节数; 这时候当然就没有汉字与字母之分了 |
|
| 第9楼 lxmxn | 发表于 2007-04-23 07:31 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by flyinspace at 2007-4-22 18:07: “>temp.tem<nul set/p=%string%”的作用和“set/p=%string%>temp.tem<nul”相同, 其实就是语句的位置替换了,但是作用都是一样的。 类似的语句还有很多,只要兄认真实践总结,方法很多的。 比如: >1.txt echo Hello,world. 和 echo Hello,world.>1.txt 的作用相同。 |
|
| 第10楼 lxmxn | 发表于 2007-04-23 07:31 |
| 版主 发帖 4,938 积分 11,386 | |
|
原来bjsh已经提前发了,算我灌水了。
|
|
| 第11楼 flyinspace | 发表于 2007-04-23 08:44 |
| 银牌会员 发帖 517 积分 1,206 | |
|
首先谢谢两位的回答,
让我知道了原来 ><还可以使用倒装句。。 又多了新的方法了:) |
|
| 第12楼 vkill | 发表于 2007-04-24 00:07 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
| 第13楼 htysm | 发表于 2007-04-24 00:28 |
| 高级用户 发帖 415 积分 866 | |
|
九宫格的连接呀。已经看过了,不过偶看不懂。
|
|
| 第14楼 flyinspace | 发表于 2007-04-25 08:38 |
| 银牌会员 发帖 517 积分 1,206 | |
|
算法我看懂了?但这个有什么用??
和主题完全没有关系啊? |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |