中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 17:59
48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何将一个文本中的最后若干个字节去掉
可打印版本  906 / 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