![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-29 07:06 |
共 47,816 主题排行 / 349,916 发帖 / 今日 2 篇 / 48,265 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 批处理中用什么命令得到一个字符串的长度? |
| 可打印版本 2,990 / 11 |
| 第1楼 xuyuansheng | 发表于 2007-01-20 00:34 |
| 初级用户 发帖 8 积分 20 | |
|
批处理中用什么命令得到一个字符串的长度? 如题。
还有,在copy A + B, C的运用中,C文件的最后一行怎么会出现一个-> 或者在UE中观看时显示“口”字?不解。 |
|
| 第2楼 redtek | 发表于 2007-01-20 01:28 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
关于兄所说的出现黑方块的情况与COPY a+b 的原理分析如下:
先建立两个文件 a 与 b 做实验:
看到这两个文件长度均为 3 个字节。 键入的是一个字母,为什么是3个字节? 看一下Debug“看到的真实”文件内容:
上面绿色标示: 代表文件长度:3个字节 上面红色标示: 代表这个文件的内容——16进制。 61 是刚才键入的字母 a 的 16进制ASCII码 0D 0A 是: 回车、换行符(16进制的 ASCII码) 所以看到的文件长度是3(回车、换符看不到——即在文件编辑器内默认是不显示的,那个Office Word 例外) 当 COPY A + B C 操作时,即文件A的内容+文件B的内容=文件C的内容。 但是看下面输出信息文件 A的长度是3字节,文件B的长度是3字节,那么 A+B 就应该是 6 个字节。 但我们看到的确是 COPY A+B C 生成的文件C居然有7个字节(多出一个字节来,哈哈……) 那么这多出的一个字节就是兄所说的在记事本里看到的那个黑方块。 下面分析它为什么会多出一个字节: Debug 文件C 的内容如下:
上面绿色标示: 表示文件长度为7个字节。 上面红色标示: 表示这些内容是文件A+文件B的内容(6字节) 上面蓝色标示: 这才是多出的1个字节,也是兄记事本里看到的那个黑方块。 它的16进制ASCII码为1A。 它表示 COPY X+N XN的文本文件的结束标置,用1A来标置。 但是,当你 COPY /B A+B C 来操作时,(使用了 /B 二进制文件表示)这个黑方块就没有了。 这是因为 /B 参数是针对二进制文件来操作的,它不允许把任何“不相干”的控制码追加到目标文件中。 (其目的是为了保持目标文件的完整与正确性),常用于拼接文件等特殊操作,它是绝对不允许产生的目标文件中还含有什么控置码存在。 所以,拼接任何文件或是文本文件全可以使用 COPY /B 参数,这样安全。 但是,我们拼接的是文本文件,那么为什么非要用 /B 处理二进制方式来处理文本文件呢? 其实在计算看来,一切都是二进制,没有什么文本之说(那只是被程序“翻译”过来让我们一目了然而已的做法),所以全把它们当二进制文件用 /B 参数操作拼接就可以了~:) [ Last edited by redtek on 2007-1-19 at 12:34 PM ] |
|
| 第3楼 lxmxn | 发表于 2007-01-20 02:44 |
| 版主 发帖 4,938 积分 11,386 | |
|
RE Redtek : 兄的讲解很精彩,能说说r命令里面的每个寄存器的作用么?像CX,DX,AX,BX之类的。现在看了例子才知道CX是存放文件字节大小数据的。 改天给兄加分~ |
|
| 第4楼 xuyuansheng | 发表于 2007-01-20 02:56 |
| 初级用户 发帖 8 积分 20 | |
|
谢二楼兄弟的精彩讲解。后来我用type来将文件A内容填进文件B了(TYPE A >> B),就不存在那些问题了。
感谢兄台。 |
|
| 第5楼 hxuan999 | 发表于 2007-01-20 02:57 |
| 中级用户 发帖 161 积分 337 | |
|
精彩,给二楼加分.
|
|
| 第6楼 redtek | 发表于 2007-01-20 02:59 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
多谢兄鼓励~:)
|
|
| 第7楼 xuyuansheng | 发表于 2007-01-20 03:01 |
| 初级用户 发帖 8 积分 20 | |
|
另外,对于这两种方法,哪一种处理方法速度更快呢?我是用小文件进行测试的,没有明显的差别。
|
|
| 第8楼 redtek | 发表于 2007-01-20 03:14 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
COPY /B 操作的目标文件共为300MB,时间:
共用时间: 另一种 TYPE A >> B 方法: (退出刚才的CMD,再重新进入一个新的CMD窗口实验) 实验代码: (type 时间最长) (原理:读A文件一行,追加到B文件尾,再重来循环……) [ Last edited by redtek on 2007-1-19 at 02:17 PM ] |
|
| 第9楼 namejm | 发表于 2007-01-20 03:20 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
请楼主不要在一个主题帖里问两个不甚相干的问题,如有多个问题请分成多个帖子发问,以便日后的搜索查询及论坛的管理。请修改本帖内容。
|
|
| 第10楼 lxmxn | 发表于 2007-01-21 14:35 |
| 版主 发帖 4,938 积分 11,386 | |
|
这个帖子居然花了半天时间才找到,汗……一直以为是在解答室。 把分给兄补上~~ |
|
| 第11楼 caucfeiyu | 发表于 2007-04-27 10:57 |
| 初级用户 发帖 35 积分 108 来自 河北廊坊 | |
|
精彩,学习中!
|
|
| 第12楼 flyinspace | 发表于 2007-04-28 03:48 |
| 银牌会员 发帖 517 积分 1,206 | |
|
呵呵,精彩,加分
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |