![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 20:13 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何将一个文本中的最后若干个字节去掉 |
| 可打印版本 908 / 11 |
| 第1楼 yy2372575 | 发表于 2006-12-21 01:07 |
| 初级用户 发帖 26 积分 73 | |
|
如何将一个文本中的最后若干个字节去掉 有人发了这个帖,我看了,代码如下
@echo off if "%1"=="" echo 参数错误,请重新设定参数……&&pause&&goto :eof set file=%~s1 set /a size=%~z1 set /a num=%~z1-100 fsutil file setzerodata offset=%num% length=100 %file% pause 但是不好使。而另一个代码 echo exit|%ComSpec%/kprompt a$_sub cx,64$_$_t$_w$_q$_|debug a.ini>nul 不知道为什么会在文本前开头产生乱码,没办法,只好旧调重弹,向高手求教!!! 说明:FOR命令在纯DOS下不好使 |
|
| 第2楼 redtek | 发表于 2006-12-21 01:38 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
哈哈……多谢yy2372575兄提醒~:)
我知道原因了, 原来是执行 MOV CX,64 把 CX寄存器值减去100时这条指命写在了地址 100H , 虽然正确执行,但却把被装入的文件的前几个字符被这条指令给覆盖掉了~:) 所以,文件前几个字符乱码状态~:) |
|
| 第3楼 redtek | 发表于 2006-12-21 01:44 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
这回不会再覆盖文件前几个字节了,躲开了文件内容所在的地址~:)
处理文件大小不超过64KB:) |
|
| 第4楼 yy2372575 | 发表于 2006-12-21 03:16 |
| 初级用户 发帖 26 积分 73 | |
|
不行呀!上回能删掉后面字节,可这个为什么对文件丝毫没有改动呢?麻烦你再试试行吗?谢谢
|
|
| 第5楼 redtek | 发表于 2006-12-21 03:25 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
不好意思,我忘了 “告诉” 代码执行哪个地址的指令了~:)
改过来了,这回试验可以了~:) |
|
| 第6楼 yy2372575 | 发表于 2006-12-21 06:03 |
| 初级用户 发帖 26 积分 73 | |
|
先谢谢大力帮助,这个代码也能删,可是为什么我把64换成10后,它删掉的字符不确定,显示的删掉是0000A,可文本里确删掉3--14个字符不确定?为什么呢?是不是对文本有什么输入要求呢?文本绝对只有英文不含汉字
|
|
| 第7楼 redtek | 发表于 2006-12-21 06:13 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
sub cx,64 相当于高级语言里的 CX = CX-64H(16进制运算)
那个64是16进制,换算成10进制就是 100 ,意思是当前所装入的这个文件的总长度减去100B(字节)的长度。 不管是文本还是可执行文件,它就减原文件长度的100个字节的长度。 (就是把当前指定的文件减少100Byte) [ Last edited by redtek on 2006-12-20 at 05:15 PM ] |
|
| 第8楼 yy2372575 | 发表于 2006-12-21 06:39 |
| 初级用户 发帖 26 积分 73 | |
|
我试了连用ECHO向文本里输入删掉的字符也不确定,我试验了一下把64改成0C时删掉的是最后10个字符。不知道为什么!!!
|
|
| 第9楼 redtek | 发表于 2006-12-21 06:46 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
0C的10进制是 12。
但是,在一个文件中,回车符与换行符我们是看不到的,可是它照样要占用空间。 回车符16进制是 0D ,它的10进制是13(常常编程里用到的那个熟悉的数字) 换行符16进制是 0A ,它的10进制是10。 所以,当你在文本文件中所输入一串字符以后仅仅打了一个回车,那么这可就占了两个字节的宽度,只是一般没有注意到而已(因为看不见) |
|
| 第10楼 redtek | 发表于 2006-12-21 06:55 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
刚才在 Debug 工具中所看到的这个我只按了3次回车键的这个文本文件里16进制所显示的内容为: 0D 0A 0D 0A 0D 0A 0D是回车符 0A是换行符 一共6个,每个符号占用了一个字节。 (上面的16进制是为显示和阅读方便) (所以表面上看到一个文件中最后的几个字节,当我数着一共有多少个字节我要删掉时,其实还应该计算那些看不到的回车换行符) [ Last edited by redtek on 2006-12-20 at 07:37 PM ] |
|
| 第11楼 yy2372575 | 发表于 2006-12-21 08:24 |
| 初级用户 发帖 26 积分 73 | |
|
我对你的敬仰如滔滔江水连绵不绝。。。。。。多谢指点!!感谢。
|
|
| 第12楼 lxmxn | 发表于 2006-12-21 12:12 |
| 版主 发帖 4,938 积分 11,386 | |
|
在DOS下面应该没有fsutil这个命令,所以无法执行。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |