无忧启动论坛

标题: 保存或恢复变量的简易脚本 [打印本页]

作者: zxw    时间: 2011-5-30 19:46
标题: 保存或恢复变量的简易脚本
  1. !BAT
  2. debug 0
  3. cat --locate=!BATSAVEVAR --length=11 (md)0x3800+10 && goto :restore
  4. echo !BATSAVEVAR > (md)0x3800+10
  5. debug 1
  6. set | call :savevar=
  7. debug 0
  8. exit
  9. :savevar
  10. if #%1==# exit
  11. echo set %1==%2 >> (md)0x3800+10
  12. shift
  13. shift
  14. goto :savevar
  15. :restore
  16. (md)0x3800+10
  17. exit
复制代码
话不多说,懂得用的,就拿去用。

[ 本帖最后由 zxw 于 2011-5-30 19:49 编辑 ]
作者: zhaohj    时间: 2011-5-30 22:24
先保存,那你能保证恢复时7M处不被破坏?
我想这个只有自己才知道,放在内存中总是不放心的。
作者: zxw    时间: 2011-5-30 23:22
标题: 回复 #2 zhaohj 的帖子
我想内存中保存的可以作为跳板,可以复制到可靠的空白文件中去。
作者: zhaohj    时间: 2011-5-30 23:46
内存变量最多是64个,每个变量占8个字节,即1个扇区,512字节
变量值占一个扇区即512字节。故共65个扇区。
变量及变量值放在(md)0x228的65个扇区,即(md)0x228+65
只要把这段内存保存,可能更加简单。
作者: zxw    时间: 2011-5-30 23:55
标题: 回复 #4 zhaohj 的帖子
这个我也考虑过,方法应该更简单,但觉得占用扇区太多。

[ 本帖最后由 zxw 于 2011-5-31 00:00 编辑 ]
作者: zhaohj    时间: 2011-5-31 11:31
这个请教下C大比较放心,应该有个内存地址是读取变量数的。比如变量数是N,只要保存(md)0x228+(n+1),n<=63
作者: chenall    时间: 2011-5-31 11:42
标题: 回复 #6 zhaohj 的帖子
这个中间有可能是空的,最保险的是使用一个空白的文件来备份,不过因为设计的关系,备份需要比较大的空间(备份一个是65个扇区太概是33KB)
作者: tuxw    时间: 2011-6-2 03:55
直接保存65个扇区是最简单的,恢复也容易

如果计较空间的话,可以用下面的代码,几乎不点一个多余的字节,缺点是不能保存内置变量还要用到2个外部命令,但现在wenv已经很少人用了,不保存内置变量也没关系
  1. !BAT
  2. if "%1"=="" exit
  3. set > (md)0x300+65
  4. echo !BAT > (md)0x3000+66
  5. wenv for /f "delims=" %i in ( (md)0x300+65 ) do echo set %i >> (md)0x3000+66
  6. wenv find -c -e -r \r\n (md)0x3000+66 ]]& set len=${?_WENV}
  7. if exist %1 && fat del %1
  8. fat mkfile size=%len% %1
  9. dd if=(md)0x3000+66 of=%1 bs=1 count=%len%
复制代码
用法: ../save.bat  (fd0)/var.bat
(fd0)需要可写,再运行 (fd0)/var.bat就恢复了。
一般情况下这个(fd0)也还是在内存中,也不一定可靠的,多一重保障而已

[ 本帖最后由 tuxw 于 2011-6-2 15:40 编辑 ]

SAVE.rar

291 Bytes, 下载次数: 21, 下载积分: 无忧币 -2


作者: zxw    时间: 2011-6-2 11:27
标题: 回复 #8 tuxw 的帖子
呵,抛砖引玉,学习了。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3