无忧启动论坛

标题: DOS下查找磁盘里的grub.exe并运行,增加一个刷入BIOS的img [打印本页]

作者: 2013abcdefg    时间: 2015-1-13 20:31
标题: DOS下查找磁盘里的grub.exe并运行,增加一个刷入BIOS的img
本帖最后由 2013abcdefg 于 2015-3-2 21:01 编辑

DOS下查找磁盘里的grub.exe并运行,文件大小13K
符件有源码

感谢TajuraTong和roytam1的支持与帮助!

相关教程请看老毛桃贴子< 硬盘无法启动,无光、软驱,没关系!不死系统让你电脑维护不耽误!>
http://bbs.wuyou.net/forum.php?m ... hlight=%B2%BB%CB%C0


grub.exe下载直达214#:
http://bbs.wuyou.net/forum.php?m ... &fromuid=472277






sshot-1.png (29.42 KB, 下载次数: 244)

G2X方案界面

G2X方案界面

sshot-1.png (17.67 KB, 下载次数: 269)

G3X方案界面

G3X方案界面

g.7z

7.69 KB, 下载次数: 70, 下载积分: 无忧币 -2

g.exe

G2X方案ROMOS.zip

355.76 KB, 下载次数: 59, 下载积分: 无忧币 -2

g2x方案img

G3X方案ROMOS (1).zip

359.64 KB, 下载次数: 86, 下载积分: 无忧币 -2

g3x方案


作者: 2013abcdefg    时间: 2015-1-14 09:40
本来想做个Wee.exe但又没有能力去做,所以就做了个小工具,用grub.exe代替了grldr
作者: cchessbd    时间: 2015-1-16 11:19
可以直接查找 grldr 并运行吗?
作者: 2013abcdefg    时间: 2015-1-17 23:19
grub.exe=grldr
作者: 765058729    时间: 2015-1-20 20:54
2013abcdefg 发表于 2015-1-14 09:40
本来想做个Wee.exe但又没有能力去做,所以就做了个小工具,用grub.exe代替了grldr

老兄,能不能搜文件夹?要不你研究下把xorboot输出的直接搜索img镜像启动的配置文件刷入bios,还可以支持文件夹,我觉得可以实现你看如何?嘿嘿,没办法,自己不会做
作者: 2013abcdefg    时间: 2015-1-20 22:51
能搜文件夹
作者: 765058729    时间: 2015-1-21 07:14
本帖最后由 765058729 于 2015-1-21 07:36 编辑

那可以玩玩了,谢谢
想起以前有分别有做好的63和127扇区wee模块,我找找看
作者: TajuraTong    时间: 2015-1-23 10:38
2013abcdefg 发表于 2015-1-20 22:51
能搜文件夹

若整个硬盘或usb上没有grub.exe,或grub.exe放在较后的位置,这程式会花长时间搜索,甚至死机。
有没有必要作文件夾搜寻?这个还需参详。

通常情况,grub.exe会放在根目录或 \boot\grub下
其实两句batch命令便可以了,当然也可以写个小汇编来实行,大概能小于500bytes
把下面的文字写入一个 xxx.bat,执行则可,前提是grub.exe须放在任何一个驱动器(包括硬盘、光盘和usb)的  \   或  \boot\grub下

@echo off
FOR %%A IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO if exist %%A\grub.exe %%A\grub.exe %1 %2 %3 %4 %5 %6 %7  
FOR %%A IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO if exist %%A\boot\grub\grub.exe %%A\boot\grub\grub.exe %1 %2 %3 %4  %5 %6 %7

作者: 2013abcdefg    时间: 2015-1-23 12:59
汇编不会写呵
作者: TajuraTong    时间: 2015-1-23 16:04
2013abcdefg 发表于 2015-1-23 12:59
汇编不会写呵

这个汇编也不复杂,照batch的思路便可,依次找寻每一个盘的\grub.exe 和 \boot\grub\grub.exe
找到则载入,找不到离开。
另外,你的程式并不传递变量,比如 g help之类,grub.exe 是不能接收到的。

这个小 com  和 batch 功能一样,比batch还小,只有312 bytes
G.rar (328 Bytes, 下载次数: 33)
作者: 2013abcdefg    时间: 2015-1-23 17:10
可否提供i源码学习一下?
作者: TajuraTong    时间: 2015-1-23 17:41
本帖最后由 TajuraTong 于 2015-1-23 17:42 编辑
2013abcdefg 发表于 2015-1-23 17:10
可否提供i源码学习一下?


噢,对不起忘了源码!

尽管思路一样,batch和汇编仍有差别,因为batch面对的是command.com,
command.com代做了许多麻烦事,汇编面对是int 21h,利用ah=43h int21h读取file属性,
读到则表示存在,马上执行,读不到则不存在,盘符+1继续读,直到盘符到Z:为止。
找完 \grub.exe 后若无果则继续找  \boot\grub\grub.exe

比较麻烦的是,无论开启file或者读取file属性,只要盘符不存在或者碰到光盘(没有插片),
dos都会弹出错误讯息如:装置未就绪 或 Drive not ready之类的句子(batch好像没有这个烦), 
所以还要拦截int 23h和int 24h(错误处理中断),让自己的编码处理,其实就是不处理,消灭了错误讯息!
g-asm.rar (1017 Bytes, 下载次数: 16)

作者: 2013abcdefg    时间: 2015-1-23 22:12
本帖最后由 2013abcdefg 于 2015-1-24 10:47 编辑

TajuraTong,如果加上查找根目录的ghost.exe,   

使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    g.com /grub    是查找根目录的grub.exe并运行

你的源码要怎么修改呢?请指教!谢谢

作者: 2013abcdefg    时间: 2015-1-23 22:13
本帖最后由 2013abcdefg 于 2015-1-24 10:44 编辑

汇编运行很快
作者: 2013abcdefg    时间: 2015-1-23 22:49
本帖最后由 2013abcdefg 于 2015-1-24 10:43 编辑
TajuraTong 发表于 2015-1-23 16:04
这个汇编也不复杂,照batch的思路便可,依次找寻每一个盘的\grub.exe 和 \boot\grub\grub.exe
找到则载 ...

TajuraTong, 你的g.exe很好, 如果我想再查找ghost怎么集成在源码里,使用参数?请指教!
作者: TajuraTong    时间: 2015-1-24 12:14
你想找grub.exe 还是 ghost.exe,其实只要改一下file地址便可以了。
我更改了g.asm的设定,改成g2.asm,新的g2.com把档案路径移到程式最末,你可以任意添加多条路径,比如
A:\dos\ghost.exe
A:\pe\ghost.exe
其中,[A:\] 和 程式名称如   [ghost.exe',0]  是必须的,新的搜查方式是会逐条路径逐个盘符搜查。
直到没有新路径为止。

为什么不搜索文件夹?其实我也用汇编写了,但速度太慢,每部机子情况不同,没必要浪费时间。

这程式是com 制式,必须将exe ->com,压缩包里包含了exe to com 的工具和g2.asm源码
你可以任意 [修改] 或 [添加]  g2.asm 里最末的路径和执行档案名称,编译成exe后再用exe2bin工具转为com

exe to com使用方法
dos 之下键入
loadfix exe2bin XXX.exe  XXX.com

其中xxx是执行档名称

exe2com.rar (8.34 KB, 下载次数: 31)
作者: 2013abcdefg    时间: 2015-1-24 12:51
本帖最后由 2013abcdefg 于 2015-1-24 13:00 编辑

我是想实现这样的效果
使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    g.com /grub    是查找根目录的grub.exe并运行

我现在的方案是用你的源码生成了两个COM文件,一个是查找grub,一个是查找ghost(已经改file地址).
本想是想只要一个com文件就可以,用参数来实现,但发现汇编的参数搞都我晕了,所以...想请指点一下

两个COM文件分别是:  (本意是想实现两个文件的合体)

ghost.com.zip

413 Bytes, 下载次数: 11, 下载积分: 无忧币 -2

查找ghost

grub.com.zip

411 Bytes, 下载次数: 9, 下载积分: 无忧币 -2

查找grub


作者: TajuraTong    时间: 2015-1-24 13:29
2013abcdefg 发表于 2015-1-24 12:51
我是想实现这样的效果
使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    ...

用参数方式查找也很简单,我的程式改一下就可以了,不过今天特忙,有空再给你看看吧,dos程式的参数,即 xxx.exe  [参数1]  [参数2]
参数都会放在cs: 区块80h的位置,80h是参数的bytes数(包括空白),82h开始才是真正的参数,汇编要自己处理,不像c那么简单就是

作者: 2013abcdefg    时间: 2015-1-24 14:02
好的,你忙,先谢了!
作者: 2013abcdefg    时间: 2015-1-24 17:30
找到一份但不知道怎么结合, 处理字符串和比较相对C好像都很麻烦
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:CODE
              ORG       100H

        MAIN  PROC      FAR
      START:  MOV       SI,80H      ; 指向psp的80h处
              LODSB                 ; 获取参数长度,记录在 al 中
              XOR       AH,AH
            ADD       SI,AX       ; SI指向参数末尾
              MOV       BYTE PTR [SI],0DH       ; 回车
              MOV       BYTE PTR [SI+1],0AH     ; 换行
              MOV       BYTE PTR [SI+2],24H     ;'$'

              MOV       DX,82H      ; 命令行参数首地址
              MOV       AH,09H     ;显示参数
              INT       21H

              MOV       AH,4CH
              INT       21H

              RET
        MAIN  ENDP
        CODE  ENDS
              END       MAIN
作者: 2013abcdefg    时间: 2015-1-24 21:01
TajuraTong, 其实你的程式还可以做得更通用性, 把文件名作为参数变量,直接查找XXX.EXE 并运行. 如: g.com  grub.exe   就是查找grub.exe并运行, g.com [xxx.exe] 这种格式就可以了.  目录其它的可以做成ini文件(用户可加可减). 这是个人的一点想法, 主要还是取决于你.
作者: TajuraTong    时间: 2015-1-24 22:37
2013abcdefg 发表于 2015-1-24 21:01
TajuraTong, 其实你的程式还可以做得更通用性, 把文件名作为参数变量,直接查找XXX.EXE 并运行. 如: g.com   ...

分析 /grub 或者 /ghost 之类的参数,弹性比较少,不如直接给出位置和程式。

这个版本加入参数分析,但不须指定/grub或/ghost

用法: g2x [程式完整路径]     (不用给出盘符)

例如1: g2x \grub.exe   (程式会由A:\grub.exe开始搜,到Z:\grub.exe,只要找到则执行。
例如2: g2x \boot\pe\ghost.exe   (程式会由A:\boot\pe\grub.exe开始,到Z:\boot\pe\grub.exe,只要找到则执行        。
没有参数或者找不到程式则直接结束。

这版本也可以传递参数:
  g2x \boot\pe\ghost.exe xxxxx yyyyy zzzzz
      跟
  ghost.exe xxxxx yyyyy zzzzz  等价,三个参数依次传递。


刚抽空写好了这个版本才看到你的回复,哈哈,忽忙写的,没有怎么测试,看看有没有bug吧

g2x.rar (2.67 KB, 下载次数: 22)


作者: 2013abcdefg    时间: 2015-1-24 23:08
本帖最后由 2013abcdefg 于 2015-1-24 23:34 编辑

好的,谢谢,你的效率很高. 我测试再看有什么.


又用IMG测试了一下, A:盘里有ghost.exe
运行 g2x \ghost.exe 没有反应

直接运行是可以的

sdfgdgd.png (17.61 KB, 下载次数: 253)

无反应

无反应

fffff.png (166.63 KB, 下载次数: 196)

直接ghost.exe是可以的

直接ghost.exe是可以的

作者: TajuraTong    时间: 2015-1-25 08:56
2013abcdefg 发表于 2015-1-24 23:08
好的,谢谢,你的效率很高. 我测试再看有什么.

暂时看不出那里出错,这版本加了错误讯息,会显示什幺出错。你可以试在实机测试一下。
运行的program必须为com或exe,程式没有做检查,若是bat或cmd或其他,运行结果将是灾难。
g2x.rar (2.47 KB, 下载次数: 17)
作者: 2013abcdefg    时间: 2015-1-25 09:20
已经实机测试了,结果和它是一样的

sshot-1.png (49.72 KB, 下载次数: 202)

sshot-1.png

ROMD64KB.zip

57.2 KB, 下载次数: 8, 下载积分: 无忧币 -2

我用的img


作者: 2013abcdefg    时间: 2015-1-25 09:20
本帖最后由 2013abcdefg 于 2015-1-25 09:25 编辑

在windows下测试是正常的
用MSDOS的IMG是正常的,可能我上面的IMG有问题吧

msdos.zip

122.84 KB, 下载次数: 12, 下载积分: 无忧币 -2


作者: TajuraTong    时间: 2015-1-25 10:38
2013abcdefg 发表于 2015-1-25 09:20
在windows下测试是正常的
用MSDOS的IMG是正常的,可能我上面的IMG有问题吧

刚才想了想,要运行bat和cmd一点也不难,不过要修改一下程式,等有空再说
今天也很忙,回头再看看你的msdos吧

作者: 2013abcdefg    时间: 2015-1-25 13:55
本帖最后由 2013abcdefg 于 2015-1-25 14:06 编辑

ROMD64KB.zip, 这个是freedos的,我是用这个刷入网卡ROM的, 经测试发现,你的第一版的g.com, 完全正常.

从第二版g2.COM到后面的g2x.com,都不能在这个ROMD64KB.IMG里运行正常!
真的希望您的带参数版本能在我的网卡ROMD64KB.img里正常运行!
做不做都 可以 ,已经很感谢了!

ROMD64KB.zip

57.2 KB, 下载次数: 14, 下载积分: 无忧币 -2

我的网IMG


作者: 110654    时间: 2015-1-25 14:11
不错 这个也可以啊
作者: 俊采星驰    时间: 2015-1-25 14:39
有没有备份网卡ROM的工具?
作者: 2013abcdefg    时间: 2015-1-25 16:37
我只有这些工具,没有备份的
http://bbs.wuyou.net/forum.php?m ... p;page=1#pid3032951
作者: TajuraTong    时间: 2015-1-25 17:38
2013abcdefg 发表于 2015-1-25 13:55
ROMD64KB.zip, 这个是freedos的,我是用这个刷入网卡ROM的, 经测试发现,你的第一版的g.com, 完全正常.

从 ...


freeDos分折参数的方式可能和别的dos有分别,暂时没空研究.
但你可以在加入参数的时候多加一个空白或以上,即

g2x \ghost.exe  <--- 1个空白,失败
g2x  \ghost.exe <--- 2个空白,我这里测试正常 
  

作者: 2013abcdefg    时间: 2015-1-25 18:55
按你说的测试 ,居然可以成功!  
g2x  \ghost.exe <--- 2个空白,测试正常 !
谢谢!
作者: 2013abcdefg    时间: 2015-1-25 18:57
查找多目录也可以做个BAT批处理, 这样可以实现多路径查找
g2x  \ghost.exe
g2x  \xxx \ghost.exe
...
作者: TajuraTong    时间: 2015-1-25 19:39
2013abcdefg 发表于 2015-1-25 18:55
按你说的测试 ,居然可以成功!  
g2x  \ghost.exe

这里做了一个特殊处理,照理可以适合 freedos或其他dos,不用理会多少空白,一个或以上皆可,你可以test一下,去吃饭了,今天到此为止,嗯...
g2x.rar (2.68 KB, 下载次数: 32)
作者: 2013abcdefg    时间: 2015-1-25 20:58
本帖最后由 2013abcdefg 于 2015-1-26 12:59 编辑

谢谢, 测试正常!  现在的已经完善了!
如果能运行BAT文件,那样更好. 可以来回调用

可以 g2x.com  xxx.bat

XXX.bat文件内容如下:
g2x \grub.exe
g2x \boot\grub\grub.exe
.....

相当于一个ini配置文件的作用了!
作者: 2013abcdefg    时间: 2015-1-26 15:14
自己用C写了一个运行BAT的小程序
格式: runbat xxx.bat

runbat.zip

5.3 KB, 下载次数: 8, 下载积分: 无忧币 -2


作者: TajuraTong    时间: 2015-1-27 14:44
2013abcdefg 发表于 2015-1-26 15:14
自己用C写了一个运行BAT的小程序
格式: runbat xxx.bat

在程式里叫用batch档,必然要经command.com处理
每一代的command.com都有差异,大抵是50k到90k大小,而且不大能互相混用
你的程式可以在大部份command.com(即dos)下运行
但有没有在 ROMD64KB.IMG的freedos下运行过?
那个4k不到的command.com基本上连if,for, prompt等等最简单的命令都无法运作
若靠它去跑 batch档,实在有点强人所难....

作者: 2013abcdefg    时间: 2015-1-27 15:06
本帖最后由 2013abcdefg 于 2015-1-27 15:14 编辑

您说的完全正确! 我的程序在 ROMD64KB.IMG的freedos下是不能运行的. 我现在的方案是把 bat(内容就是g2x \grub.exe 多个目录)转成COM文件, 再调用.(你的程序已改名成gdir.com)

ps:里面那个gui.exe其实是可以经command.com调用bat的(格式为command.com /c  xxx.bat), 但那个ROMD64KB.IMG的command.com太弱了,不能用.所以用了上面的方案.权宜之计.



ROMD64KB.zip

53.07 KB, 下载次数: 11, 下载积分: 无忧币 -2


作者: roytam1    时间: 2015-1-27 15:57
本帖最后由 roytam1 于 2015-1-27 16:22 编辑
2013abcdefg 发表于 2015-1-27 15:06
您说的完全正确! 我的程序在 ROMD64KB.IMG的freedos下是不能运行的. 我现在的方案是把 bat(内容就是g2x \gr ...


himemx.exe可以換用xmgr
http://www.ibiblio.org/pub/micro ... vers-2014-10-19.zip

minicmd的源碼,有心人可以用Borland C和TASM/TLINK編譯。
minicmd.7z (18.88 KB, 下载次数: 10)


作者: TajuraTong    时间: 2015-1-27 16:30
2013abcdefg 发表于 2015-1-27 15:06
您说的完全正确! 我的程序在 ROMD64KB.IMG的freedos下是不能运行的. 我现在的方案是把 bat(内容就是g2x \gr ...

嗯...
我有一个想法,在freedos下载入另一个版本的command.com
之后由这个新的command.com接管dos的运作,透过之前的写的g2.com就可以了

我找到一个dos7版本的command.com,为免和其他command.com混淆,
我把它改名为 : 71comm.com
这个71comm.com你可以把它放在和 \grub.exe 或者 \ghost.exe同一个位置
(因为这个command.com太大了, ROMD64KB.IMG不可能塞入它)

这个版本的g2.com的运作方式是:

1.由A:\71comm.com开始找寻,直到Z:\71comm.com为止,找到则载入它

2.载入之同时,传递一个参数给71comm.com,[ dosset.bat 盘符:]
这里面的 [盘符:],和  [盘符:]\71comm.com是一样的,
即,若由H:\71comm.com载入,则参数将是 dosset.bat H:


71comm.com是所谓dos shell,要通知freedos的核心它的存在,
可以用 set COMSPEC=[盘符]\command.com的方式
不这样做,其他程式,比如你写的runbat.exe只会仍然呼叫旧的a:\command.com或者a:\command.com

但由g2.com载入 71comm.com,好像只能传递一组参数,换言之
同时传递 prompt $p$g 和 set COMSPEC=[盘符]\71comm.com似乎不可能
这样就呼叫一个dosset.bat吧,由它去做全盘设定,用家还可以加添其他命令

dosset.bat里接收由g2.com传过来的[盘符]参数,比如A:....H:之类,然后再
用 set COMSPEC=%1\71comm.com  的方式去改变 COMSPEC参数

dosset.bat的内容:
---------
@echo off
prompt $p$g
for %%A in (A: B: C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:)  do if %%A==%1 set COMSPEC=%1\71comm.com
---------

说了这么多,实作的方式其实很简单,把新的g2.com(可以改任意名)和dosset.bat写入ROMD64KB.IMG
71comm.com放到 \grub.exe 或者 \ghost.exe同一个位置

完了,键入g2.com便是!

这之后,71comm.com会接管dos,其他需要足够支援的程式,比如你的runbat.exe
应该可以正常运作
另外,其他较复杂的dos指令,如dir,不会连日期,file大小都看不见了


我这里没有你的测试环境,你可以试试有没有bug....


g2-new.rar (42.82 KB, 下载次数: 23)
作者: 2013abcdefg    时间: 2015-1-27 17:16
roytam1 发表于 2015-1-27 15:57
himemx.exe可以換用xmgr
http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/xms/xmgr/dri ...

谢谢提供!
作者: 2013abcdefg    时间: 2015-1-27 17:17
本帖最后由 2013abcdefg 于 2015-1-27 17:51 编辑
TajuraTong 发表于 2015-1-27 16:30
嗯...
我有一个想法,在freedos下载入另一个版本的command.com
之后由这个新的command.com接管dos的运 ...


好的,我先测试看


已经实机测试了, 运行g2.com 和g2.com \grub.exe  后,再dir,无变化. 运行我的runbat.exe也是无效的
作者: TajuraTong    时间: 2015-1-27 18:33
2013abcdefg 发表于 2015-1-27 17:17
好的,我先测试看

先要知道71comm.com是否存在

可以键入
g2x  \71comm.com  /K dosset.bat  A:

这句和g2.com几乎是等价的,只差最后的A:,因为g2x.com不会自动填入dosset.bat后的参数,需要手动输入
若你的71comm.com在Z:
便要键入:g2x  \71comm.com  /K dosset.bat Z:

若成功再键入SET看看有没有改变

g2.com做的工作只是加参数而已

作者: 2013abcdefg    时间: 2015-1-27 18:52
本帖最后由 2013abcdefg 于 2015-1-27 18:54 编辑

已经按你说的键入:g2x  \71comm.com  /K dosset.bat Z:测试成功!
运行set后已经有CMDLINE=g2 ...,
dir也是正常的.

71comm.com已经接管了DOS

谢谢您的支持!
作者: TajuraTong    时间: 2015-1-27 19:25
2013abcdefg 发表于 2015-1-27 18:52
已经按你说的键入:g2x  \71comm.com  /K dosset.bat Z:测试成功!
运行set后已经有CMDLINE=g2 ...,
dir ...

71comm.com之下,一切方便得多了,你可以跑跑其他软件试试

暂时看不出g2.com哪里出问题,在我的虚拟机是正常的
既然g2x.com正常,有空我会修改一下g2x.com,若发现有dos command.com的参数,
自动给dosset.bat填入盘符....

另外,还想把g2x.com变为gui,读取ini,其实程式不复杂,我写过比它复杂百倍的东西,只差有没有精神而已...

作者: 2013abcdefg    时间: 2015-1-27 19:58
TajuraTong 发表于 2015-1-27 19:25
71comm.com之下,一切方便得多了,你可以跑跑其他软件试试

暂时看不出g2.com哪里出问题,在我的虚拟机 ...

如果能读ini, 那是最好的方式了!   像GUI一样的程式就相当于dos的GUI了!
作者: TajuraTong    时间: 2015-1-28 11:56
本帖最后由 TajuraTong 于 2015-1-28 16:55 编辑
TajuraTong 发表于 2015-1-27 19:25
71comm.com之下,一切方便得多了,你可以跑跑其他软件试试

暂时看不出g2.com哪里出问题,在我的虚拟机 ...


之前说修改g2x.com,给dosset.bat自动填入盘符,想想,这样做太琐碎。
不如由g2x.com传回errorlevel更具弹性,因为别的程式或batch均可读取,再做处理。

好吧,g2x.com只做了小修改,发现file,并顺利执行则传回执行档案的盘符编号

比如键入g2x \71comm.com
若成功执行71comm.com且在A盘则传回1,B盘传回2.....Z盘传回26

压缩包里有新版的g2x.com,一个sdos.bat批次档和71comm.com
键入sdos.bat就可以了,不须任何参数。

运行流程:
sdos.bat第一次被载入,当前环境,还是freeDos那个弱爆command.com
不认得第一行的 if,直接无视跳到第2行,执行g2x  \71comm.com /K sdos.bat  XX:
/K 表示不返回,载入新的dos 7.1后由它执行sdos.bat XX:

sdos.bat第2次被载入,当前环境,已是威力相当的dos 7.1,有能力解释第一句了
因着参数"%1"=="XX:",于是跳到done,然后再次执行g2x  \71comm.com  /c echo  ..
/c 表示返回,这样才可以获取errorlevel。(freeDos下的command.com没有本事解释errorlevel)

根据errorlevel跳到相关的位置设定变nn,若errorlevel=26,nn=Z,errorlevel=25,nn=Y.....
然后再跳到去设定COMSPEC

set COMSPEC=%nn%:\71comm.com
prompt $p$g
cls
echo Dos 7.1 Loading...
(收工)


sdos.bat 的样子很丑陋,因为dos 7.1尽管比freedos强,但远没有windows的cmd.exe那样无所不能,
连&&也不支援,不能简化代码,只好将就。


用法:
把sdos.bat和g2x.com放进ROMD64KB.IMG,71comm.com放到任何盘里,
若71comm.com不在\,可自行修改sdos.bat,之前的dosset.bat可以丢了。
键入sdos.bat就是。
若不小心按了exit,会返回freedos,可以再键入sdos.bat跳回dos7.1


-------------------------------------------------------------
if "%1"=="XX:" goto done      (第1行)
g2x  \71comm.com  /K sdos.bat  XX:  (第2行)
:done
g2x  \71comm.com  /c echo  ..
if errorlevel 27 goto error
if errorlevel 26 goto Z
if errorlevel 25 goto Y
.
.
.
.
if errorlevel 1  goto A
.
.
.
:A
set nn=A
goto NX
.
.
.
:NX
set COMSPEC=%nn%:\71comm.com
prompt $p$g
cls
echo Dos 7.1 Loading...

-------------------------------------------------------------


g2x-dos.rar (42.71 KB, 下载次数: 32) g2x-dos.rar (41.59 KB, 下载次数: 33)
作者: 2013abcdefg    时间: 2015-1-28 13:02
roytam1 发的minicmd源码里有minicmd.com, 我看了一下源码,里面有  if... 不知道是否支持

minicmd.7z

18.88 KB, 下载次数: 1, 下载积分: 无忧币 -2


作者: roytam1    时间: 2015-1-28 13:47
本帖最后由 roytam1 于 2015-1-28 13:50 编辑
2013abcdefg 发表于 2015-1-28 13:02
roytam1 发的minicmd源码里有minicmd.com, 我看了一下源码,里面有  if... 不知道是否支持


minicmd只支持 IF EXIST (和我增加的 IF ERRORLEVEL)
你可以試試。
作者: 2013abcdefg    时间: 2015-1-28 14:29
TajuraTong 发表于 2015-1-28 11:56
之前说修改g2x.com,给dosset.bat自动填入盘符,想想,这样做太琐碎。
不如由g2x.com传回errorlevel更具 ...

经测试使用正常! 直接sdos是成功的, 71commd.com接管DOS.
键入exit后,再set查看,里面还有comspec=c:\71command.com, 这个好还还是使用71command.com的.
作者: 2013abcdefg    时间: 2015-1-28 14:31
本帖最后由 2013abcdefg 于 2015-1-28 14:34 编辑
roytam1 发表于 2015-1-28 13:47
minicmd只支持 IF EXIST (和我增加的 IF ERRORLEVEL)
你可以試試。


直接使用minicmd.com(替代原rom64k里的command.com)运行xxx.bat
if "%1"=="XX:" goto done      (第1行)
这个已经显示出错了.
不过能提供这个功能更强的minicmd.com , 本人表示支持与感谢!
作者: roytam1    时间: 2015-1-28 15:04
2013abcdefg 发表于 2015-1-28 14:31
直接使用minicmd.com(替代原rom64k里的command.com)运行xxx.bat
if "%1"=="XX:" goto done      ...

因為minicmd不支持引數和字串比對啊
作者: roytam1    时间: 2015-1-28 15:18
另外可以不使用MS-DOS command.com而使用FreeDOS FreeCOM,反正效果是一樣的,而且免費、開源。
fcm84pr2.7z (49.06 KB, 下载次数: 11)
作者: TajuraTong    时间: 2015-1-28 15:29
2013abcdefg 发表于 2015-1-28 14:29
经测试使用正常! 直接sdos是成功的, 71commd.com接管DOS.
键入exit后,再set查看,里面还有comspec=c:\71c ...


这是因为按exit回到原来的sdos.bat,[当前环境] 换回弱爆的command.com
无法解释接下来的命令,包括goto, if, exit 之类,于是一直执行到最后的
set COMSPEC=%nn%:\71comm.com
这个set它居然又认得,所以set成了COMSPEC=%nn%:\71comm.com

没法由中间处离开,权宜的方法是叫用一个外置bat,让它直接离开

方法:
在sdos,bat 第2句下加一个sexit.bat就可以了
g2x  \71comm.com  /K sdos.bat  XX:
sexit.bat    <---加这一句

sexit.bat的内容,请自行建立和sdos.bat放在一起
------------
Echo back to freeDOS
------------

完成!

你可以在两个dos下按set,看看有没有各自的comspec
作者: 2013abcdefg    时间: 2015-1-28 16:39
本帖最后由 2013abcdefg 于 2015-1-28 16:41 编辑
TajuraTong 发表于 2015-1-28 15:29
这是因为按exit回到原来的sdos.bat,[当前环境] 换回弱爆的command.com
无法解释接下来的命令,包括go ...


加了 sexit.bat 后,set正常!
切换正常.

g2x.com如果能读ini , (格式 g2x.com  xxx.ini )那就是一个完美的工具了
ini配置文件内容可以是如下:
\grub.exe
\boot\grub\grub.exe
...
现在我是用bat文件解决多个目录问题的
作者: 2013abcdefg    时间: 2015-1-28 16:43
roytam1 发表于 2015-1-28 15:18
另外可以不使用MS-DOS command.com而使用FreeDOS FreeCOM,反正效果是一樣的,而且免費、開源。


其实用你的minifcmd.com也是不错的, dir 可以显示时间 ,比原来的强. 已经在rom64k.img里用上!谢谢
作者: roytam1    时间: 2015-1-28 19:13
稍微改進了一下minicmd:
- 可以直接用 "dir/w" 不用加空格了
- if 不再產生空行了
- if 支持 NOT 關鍵字
- 換用aPack壓縮
minicmd.7z (19.01 KB, 下载次数: 17)
作者: 2013abcdefg    时间: 2015-1-28 19:32
roytam1 发表于 2015-1-28 19:13
稍微改進了一下minicmd:
- 可以直接用 "dir/w" 不用加空格了
- if 不再產生空行了

很好用, 谢谢提供!
作者: roytam1    时间: 2015-1-28 22:30
加入了變量替換的功能,
  1. C:\>set x1=1
  2. C:\>set x2=%x1%2
  3. C:\>set x2
  4. X2=12
复制代码

由於輸入緩衝只有80字節,太長的變量替換會導致要被處理的命令行字串被截斷。
minicmd.7z (19.69 KB, 下载次数: 9)
作者: 2013abcdefg    时间: 2015-1-28 22:42
功能还是很实用的.谢谢,
作者: roytam1    时间: 2015-1-28 23:45
本帖最后由 roytam1 于 2015-1-28 23:49 编辑

加入 if [not] x==y 功能。
  1. C:\>if %username%==Roy echo 1
  2. 1
复制代码

minicmd.7z (19.95 KB, 下载次数: 13)

ROMD64K.IMG 在換用xmgr.sys和這個minicmd.com後還能剩3KB
作者: 2013abcdefg    时间: 2015-1-29 08:13
本帖最后由 2013abcdefg 于 2015-1-29 08:18 编辑
roytam1 发表于 2015-1-28 23:45
加入 if [not] x==y 功能。


在config.sys里直接DEVICE=B:\xmgr.sys
这样就可了以吗?

是啊,还有空间, 我又加了个phdcpy.com(可以硬盘对拷,没测试)和mbr.com(备份更新MBR的),

hdcpy mbr.zip

2.1 KB, 下载次数: 12, 下载积分: 无忧币 -2


作者: roytam1    时间: 2015-1-29 08:49
2013abcdefg 发表于 2015-1-29 08:13
在config.sys里直接DEVICE=B:\xmgr.sys
这样就可了以吗?

對啊
作者: 2013abcdefg    时间: 2015-1-29 09:06
您的minicmd.com 是否可以加入ren 重命名文件的命令? 还是很实用的
作者: roytam1    时间: 2015-1-29 09:26
本帖最后由 roytam1 于 2015-1-29 10:15 编辑
2013abcdefg 发表于 2015-1-29 08:13
在config.sys里直接DEVICE=B:\xmgr.sys
这样就可了以吗?


這個是從plop.at來的吧我也沒試過。
附件的shutdown可取代reboot.com和off.com,省下512字節
shutdown s = off.com
shutdown r = reboot.com
SHUTDOWN.7z (1.88 KB, 下载次数: 18)

jmp fff0:00f0 感覺沒比經 port 64h reset 好,再上傳一個經 port 64h reset 的。
SHUTDOWN.7z (1.9 KB, 下载次数: 24)
作者: roytam1    时间: 2015-1-29 09:39
本帖最后由 roytam1 于 2015-1-29 09:42 编辑
2013abcdefg 发表于 2015-1-29 09:06
您的minicmd.com 是否可以加入ren 重命名文件的命令? 还是很实用的


好。
minicmd.7z (69.93 KB, 下载次数: 11)

附上的是完整可獨立用Borland C++ 2.0編譯的環境(BC2請自行獲得)
benv.bat設定Borland C++ 位置
mk.bat設定編譯環境並編譯
作者: 2013abcdefg    时间: 2015-1-29 10:15
roytam1 发表于 2015-1-29 09:26
這個是從plop.at來的吧我也沒試過。
附件的shutdown可取代reboot.com和off.com,省下512字節
shutdown  ...

谢谢您的支持与帮助!
作者: roytam1    时间: 2015-1-29 10:15
2013abcdefg 发表于 2015-1-29 10:15
谢谢您的支持与帮助!

剛更新了shutdown,上去再下載吧
作者: 2013abcdefg    时间: 2015-1-29 10:18
roytam1 发表于 2015-1-29 09:39
好。

再次表示感谢! 已经更新到rom64k.img !
作者: 2013abcdefg    时间: 2015-1-29 10:24
roytam1 发表于 2015-1-29 10:15
剛更新了shutdown,上去再下載吧

好的
作者: roytam1    时间: 2015-1-29 11:15
修正prompt沒換行的問題
minicmd.7z (69.93 KB, 下载次数: 13)
作者: 2013abcdefg    时间: 2015-1-29 11:40
谢谢roytam1, 还能加上 MD  创建一个目录命令吗?如果加上太大或者更麻烦就不用加了.谢谢您的支持!
作者: 2013abcdefg    时间: 2015-1-29 11:45
感谢TajuraTong和roytam1的支持与帮助! 让rom64k.img 增辉不少! 谢谢!
作者: roytam1    时间: 2015-1-29 12:22
2013abcdefg 发表于 2015-1-29 11:40
谢谢roytam1, 还能加上 MD  创建一个目录命令吗?如果加上太大或者更麻烦就不用加了.谢谢您的支持!


MD和RD都加了,ver會顯示DOS版本號了。
minicmd.7z (70.21 KB, 下载次数: 19)
作者: TajuraTong    时间: 2015-1-29 12:52
最好预留2k-3k给g2x gui化
找空会动手

作者: 2013abcdefg    时间: 2015-1-29 13:53
roytam1 发表于 2015-1-29 12:22
MD和RD都加了,ver會顯示DOS版本號了。

您的效率好高呵! 好用! 谢谢!
作者: 2013abcdefg    时间: 2015-1-29 13:55
TajuraTong 发表于 2015-1-29 12:52
最好预留2k-3k给g2x gui化
找空会动手

好的! 支持TajuraTong! 越来越高质量了!
作者: roytam1    时间: 2015-1-29 21:49
加入date和time指令作顯示日期和時間之用。
minicmd.7z (70.82 KB, 下载次数: 12)

修改方面因為要驗證格式,代碼會膨脹所以不弄了。
作者: roytam1    时间: 2015-1-29 22:27
修正ver顯示版本小數位不正確的問題。
加入"ver /"時顯示真實DOS版本(INT 21/AX=3306)
minicmd.7z (70.9 KB, 下载次数: 12)
作者: 2013abcdefg    时间: 2015-1-30 09:42
roytam1 发表于 2015-1-29 22:27
修正ver顯示版本小數位不正確的問題。
加入"ver /"時顯示真實DOS版本(INT 21/AX=3306)

谢谢您的支持!
作者: roytam1    时间: 2015-1-30 09:44
減少並合併函數,以減少體積 (雖然FAT中的大小無法減少啦。)
minicmd.7z (70.74 KB, 下载次数: 38)
作者: 2013abcdefg    时间: 2015-1-30 11:05
roytam1 发表于 2015-1-30 09:44
減少並合併函數,以減少體積 (雖然FAT中的大小無法減少啦。)

正想如何减少体积,您就做好了,谢谢!
作者: TajuraTong    时间: 2015-1-30 11:43
roytam1 发表于 2015-1-30 09:44
減少並合併函數,以減少體積 (雖然FAT中的大小無法減少啦。)

对的,每次缩减须以磁区(512)的倍数为单位,否则实质意义不大。
作者: 2013abcdefg    时间: 2015-1-30 12:16
TajuraTong 发表于 2015-1-30 11:43
对的,每次缩减须以磁区(512)的倍数为单位,否则实质意义不大。

原来这样的,谢谢指教!
作者: TajuraTong    时间: 2015-1-30 12:40
2013abcdefg 发表于 2015-1-30 12:16
原来这样的,谢谢指教!

每个档案起码占一个磁区,在fat中,1byte和512同样占一个磁区,硬盘的磁区byte数更大,所以才有那些压缩磁盘的方法,先不说压缩率,把那些琐碎的档案合拼处理后,减省许多byte小而占大空间的情况
作者: roytam1    时间: 2015-1-30 18:48
本帖最后由 roytam1 于 2015-1-30 21:13 编辑

用Sourcer 4.54反組譯了Power Menu 1.0c,把沒用的信息和CheckSum校驗去掉重編了,aPack壓縮後大小只有1049字節。
PWRMENU.7z (4.72 KB, 下载次数: 14)

源碼改進,換了配色
PWRMENU.7z (3.97 KB, 下载次数: 14)
作者: wang6610    时间: 2015-1-30 22:06
楼主并没有在顶楼附上更新后的img啊。
作者: 2013abcdefg    时间: 2015-1-30 23:25
wang6610 发表于 2015-1-30 22:06
楼主并没有在顶楼附上更新后的img啊。

稍后我会更新……
作者: 2013abcdefg    时间: 2015-1-30 23:27
roytam1 发表于 2015-1-30 18:48
用Sourcer 4.54反組譯了Power Menu 1.0c,把沒用的信息和CheckSum校驗去掉重編了,aPack壓縮後大小只有1049 ...

非常感谢!早想换背景色了!
作者: 2013abcdefg    时间: 2015-1-31 09:04
2013abcdefg 发表于 2015-1-30 23:27
非常感谢!早想换背景色了!

请教roytam1个问题
pwrmenu的说明档里面写有支持BAT的
格式:{xxx.bat}command.com /c xxx.bat

但是在minicmd.com下是无效的
minicmd.com /c xxx.bat
或者 minicmd.com xxx.bat
都是无效的。

这个是PWRMENU的原因还是minicmd.com的原因呢?
作者: roytam1    时间: 2015-1-31 10:11
2013abcdefg 发表于 2015-1-31 09:04
请教roytam1个问题
pwrmenu的说明档里面写有支持BAT的
格式:{xxx.bat}command.com /c xxx.bat

這個要在minicmd中實視,稍後時間我試試看
作者: TajuraTong    时间: 2015-1-31 10:51
roytam1 发表于 2015-1-31 10:11
這個要在minicmd中實視,稍後時間我試試看

pwrmenu好像只是把command.com载入,没有传递参数,并不能执行batch,
即便传了,command.com不支持 /c 也没用。

minicmd.com似乎也没有 /c 的机制。

设想中新的gui - g2x可以执行bat(当然也要command支持),大概两三天后完成(要找时间写),暂时不用折腾pwrmenu了。

作者: roytam1    时间: 2015-1-31 13:53
2013abcdefg 发表于 2015-1-31 09:04
请教roytam1个问题
pwrmenu的说明档里面写有支持BAT的
格式:{xxx.bat}command.com /c xxx.bat

試試這個
minicmd.7z (70.95 KB, 下载次数: 21)
作者: 2013abcdefg    时间: 2015-1-31 14:13
好的,谢谢支持!
作者: 2013abcdefg    时间: 2015-1-31 15:29
本帖最后由 2013abcdefg 于 2015-1-31 16:04 编辑
roytam1 发表于 2015-1-31 13:53
試試這個


测试完全正常,终于可以使用了!真的很感谢roytam1.
特更新rom64k.img! 里面的grub.bat可以加入多个路径 (顶楼也已更新)

ROMOS.7z

348.85 KB, 下载次数: 12, 下载积分: 无忧币 -2


作者: 2013abcdefg    时间: 2015-1-31 16:29
TajuraTong 发表于 2015-1-31 10:51
pwrmenu好像只是把command.com载入,没有传递参数,并不能执行batch,
即便传了,command.com不支持 /c  ...

很期待!现在minicmd.com 已经支持 /c了,原gui.exe可调用bat了,我现在的方案是用您的g2x.com以bat文件(类似ini文件)用的. 这样只要改bat文件就可以改多目录了! 谢谢
作者: roytam1    时间: 2015-1-31 18:41
修正 minicmd /c echo 1 時首行多一空行的問題
修正 minicmd /c echo 1 時尾行多一行提示符的問題
修正無法運行 "mem/c" 格式的命令的問題
minicmd.7z (71.09 KB, 下载次数: 18)
作者: 2013abcdefg    时间: 2015-1-31 19:50
本帖最后由 2013abcdefg 于 2015-1-31 21:11 编辑
roytam1 发表于 2015-1-31 18:41
修正 minicmd /c echo 1 時首行多一空行的問題
修正 minicmd /c echo 1 時尾行多一行提示符的問題
修正無 ...


谢谢!发现有问题,用原版的pwrmenu和您的新版minicmd.com,配置文件引用bat文件可以正常运行!

用您修改版的pwrmenu和您的新版minicmd.com,配置文件引用bat文件不能正常运行!
作者: roytam1    时间: 2015-1-31 21:26
2013abcdefg 发表于 2015-1-31 19:50
谢谢!发现有问题,用原版的pwrmenu和您的新版minicmd.com,配置文件引用bat文件可以正常运行!

用您 ...

relocation的問題,只好hex-edit原版的了
改顏色方面因為比較鎖碎只好張就了
GUI.7z (1.19 KB, 下载次数: 9)




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