无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2013abcdefg
打印 上一主题 下一主题

DOS下查找磁盘里的grub.exe并运行,增加一个刷入BIOS的img

  [复制链接]
31#
 楼主| 发表于 2015-1-25 16:37:51 | 只看该作者
回复

使用道具 举报

32#
发表于 2015-1-25 17:38:26 | 只看该作者
2013abcdefg 发表于 2015-1-25 13:55
ROMD64KB.zip, 这个是freedos的,我是用这个刷入网卡ROM的, 经测试发现,你的第一版的g.com, 完全正常.

从 ...


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

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

使用道具 举报

33#
 楼主| 发表于 2015-1-25 18:55:33 | 只看该作者
按你说的测试 ,居然可以成功!  
g2x  \ghost.exe <--- 2个空白,测试正常 !
谢谢!

点评

这里做了一个特殊处理,照理可以适合 freedos或其他dos,不用理会多少空白,一个或以上皆可,你可以test一下,去吃饭了,今天到此为止,嗯...  详情 回复 发表于 2015-1-25 19:39
回复

使用道具 举报

34#
 楼主| 发表于 2015-1-25 18:57:24 | 只看该作者
查找多目录也可以做个BAT批处理, 这样可以实现多路径查找
g2x  \ghost.exe
g2x  \xxx \ghost.exe
...
回复

使用道具 举报

35#
发表于 2015-1-25 19:39:25 | 只看该作者
2013abcdefg 发表于 2015-1-25 18:55
按你说的测试 ,居然可以成功!  
g2x  \ghost.exe

这里做了一个特殊处理,照理可以适合 freedos或其他dos,不用理会多少空白,一个或以上皆可,你可以test一下,去吃饭了,今天到此为止,嗯...
g2x.rar (2.68 KB, 下载次数: 32)
回复

使用道具 举报

36#
 楼主| 发表于 2015-1-25 20:58:29 | 只看该作者
本帖最后由 2013abcdefg 于 2015-1-26 12:59 编辑

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

可以 g2x.com  xxx.bat

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

相当于一个ini配置文件的作用了!
回复

使用道具 举报

37#
 楼主| 发表于 2015-1-26 15:14:04 | 只看该作者
自己用C写了一个运行BAT的小程序
格式: runbat xxx.bat

runbat.zip

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

点评

在程式里叫用batch档,必然要经command.com处理 每一代的command.com都有差异,大抵是50k到90k大小,而且不大能互相混用 你的程式可以在大部份command.com(即dos)下运行 但有没有在 ROMD64KB.IMG的freedos下运  详情 回复 发表于 2015-1-27 14:44
回复

使用道具 举报

38#
发表于 2015-1-27 14:44:36 | 只看该作者
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档,实在有点强人所难....
回复

使用道具 举报

39#
 楼主| 发表于 2015-1-27 15:06:33 | 只看该作者
本帖最后由 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

点评

嗯... 我有一个想法,在freedos下载入另一个版本的command.com 之后由这个新的command.com接管dos的运作,透过之前的写的g2.com就可以了 我找到一个dos7版本的command.com,为免和其他command.com混淆, 我把  详情 回复 发表于 2015-1-27 16:30
minicmd的源碼,有心人可以用Borland C和TASM/TLINK編譯。  详情 回复 发表于 2015-1-27 15:57
回复

使用道具 举报

40#
发表于 2015-1-27 15:57:58 | 只看该作者
本帖最后由 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)

点评

谢谢提供!  详情 回复 发表于 2015-1-27 17:16
回复

使用道具 举报

41#
发表于 2015-1-27 16:30:27 | 只看该作者
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)

点评

好的,我先测试看  详情 回复 发表于 2015-1-27 17:17
回复

使用道具 举报

42#
 楼主| 发表于 2015-1-27 17:16:33 | 只看该作者
roytam1 发表于 2015-1-27 15:57
himemx.exe可以換用xmgr
http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/xms/xmgr/dri ...

谢谢提供!
回复

使用道具 举报

43#
 楼主| 发表于 2015-1-27 17: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也是无效的

点评

先要知道71comm.com是否存在 可以键入 g2x \71comm.com /K dosset.bat A: 这句和g2.com几乎是等价的,只差最后的A:,因为g2x.com不会自动填入dosset.bat后的参数,需要手动输入 若你的71comm.com在Z:  详情 回复 发表于 2015-1-27 18:33
回复

使用道具 举报

44#
发表于 2015-1-27 18:33:12 | 只看该作者

先要知道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做的工作只是加参数而已
回复

使用道具 举报

45#
 楼主| 发表于 2015-1-27 18:52:54 | 只看该作者
本帖最后由 2013abcdefg 于 2015-1-27 18:54 编辑

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

71comm.com已经接管了DOS

谢谢您的支持!

点评

71comm.com之下,一切方便得多了,你可以跑跑其他软件试试 暂时看不出g2.com哪里出问题,在我的虚拟机是正常的 既然g2x.com正常,有空我会修改一下g2x.com,若发现有dos command.com的参数, 自动给dosset.bat  详情 回复 发表于 2015-1-27 19:25
回复

使用道具 举报

46#
发表于 2015-1-27 19:25:20 | 只看该作者
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,其实程式不复杂,我写过比它复杂百倍的东西,只差有没有精神而已...

点评

之前说修改g2x.com,给dosset.bat自动填入盘符,想想,这样做太琐碎。 不如由g2x.com传回errorlevel更具弹性,因为别的程式或batch均可读取,再做处理。 好吧,g2x.com只做了小修改,发现file,并顺利执行则传回  详情 回复 发表于 2015-1-28 11:56
如果能读ini, 那是最好的方式了! 像GUI一样的程式就相当于dos的GUI了!  详情 回复 发表于 2015-1-27 19:58
回复

使用道具 举报

47#
 楼主| 发表于 2015-1-27 19:58:53 | 只看该作者
TajuraTong 发表于 2015-1-27 19:25
71comm.com之下,一切方便得多了,你可以跑跑其他软件试试

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

如果能读ini, 那是最好的方式了!   像GUI一样的程式就相当于dos的GUI了!
回复

使用道具 举报

48#
发表于 2015-1-28 11:56:46 | 只看该作者
本帖最后由 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)

点评

经测试使用正常! 直接sdos是成功的, 71commd.com接管DOS. 键入exit后,再set查看,里面还有comspec=c:\71command.com, 这个好还还是使用71command.com的.  详情 回复 发表于 2015-1-28 14:29
您的方式相当于切换两个command.com了, 方法不错  发表于 2015-1-28 13:04
回复

使用道具 举报

49#
 楼主| 发表于 2015-1-28 13:02:04 | 只看该作者
roytam1 发的minicmd源码里有minicmd.com, 我看了一下源码,里面有  if... 不知道是否支持

minicmd.7z

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

点评

minicmd只支持 IF EXISTS (和我增加的 IF ERRORLEVEL) 你可以試試。  详情 回复 发表于 2015-1-28 13:47
回复

使用道具 举报

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


minicmd只支持 IF EXIST (和我增加的 IF ERRORLEVEL)
你可以試試。

点评

直接使用minicmd.com运行sdos.bat if "%1"=="XX:" goto done      (第1行) 这个已经显示出错了. 不过能提供这个功能更强的minicmd.com , 本人表示支持与感谢!  详情 回复 发表于 2015-1-28 14:31
回复

使用道具 举报

51#
 楼主| 发表于 2015-1-28 14:29:16 | 只看该作者
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的.

点评

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

使用道具 举报

52#
 楼主| 发表于 2015-1-28 14:31:52 | 只看该作者
本帖最后由 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 , 本人表示支持与感谢!

点评

因為minicmd不支持引數和字串比對啊  详情 回复 发表于 2015-1-28 15:04
回复

使用道具 举报

53#
发表于 2015-1-28 15:04:33 | 只看该作者
2013abcdefg 发表于 2015-1-28 14:31
直接使用minicmd.com(替代原rom64k里的command.com)运行xxx.bat
if "%1"=="XX:" goto done      ...

因為minicmd不支持引數和字串比對啊
回复

使用道具 举报

54#
发表于 2015-1-28 15:18:47 | 只看该作者
另外可以不使用MS-DOS command.com而使用FreeDOS FreeCOM,反正效果是一樣的,而且免費、開源。
fcm84pr2.7z (49.06 KB, 下载次数: 11)

点评

其实用你的minifcmd.com也是不错的, dir 可以显示时间 ,比原来的强. 已经在rom64k.img里用上  详情 回复 发表于 2015-1-28 16:43
回复

使用道具 举报

55#
发表于 2015-1-28 15:29:17 | 只看该作者
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

点评

加了 sexit.bat 后,set正常! 切换正常. g2x.com如果能读ini , 那就是一个完美的工具了 ini配置文件内容可以是如下: \grub.exe \boot\grub\grub.exe ... 现在我是用bat文件解决多个目录问题的  详情 回复 发表于 2015-1-28 16:39
回复

使用道具 举报

56#
 楼主| 发表于 2015-1-28 16:39:42 | 只看该作者
本帖最后由 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文件解决多个目录问题的
回复

使用道具 举报

57#
 楼主| 发表于 2015-1-28 16:43:11 | 只看该作者
roytam1 发表于 2015-1-28 15:18
另外可以不使用MS-DOS command.com而使用FreeDOS FreeCOM,反正效果是一樣的,而且免費、開源。


其实用你的minifcmd.com也是不错的, dir 可以显示时间 ,比原来的强. 已经在rom64k.img里用上!谢谢
回复

使用道具 举报

58#
发表于 2015-1-28 19:13:57 | 只看该作者
稍微改進了一下minicmd:
- 可以直接用 "dir/w" 不用加空格了
- if 不再產生空行了
- if 支持 NOT 關鍵字
- 換用aPack壓縮
minicmd.7z (19.01 KB, 下载次数: 17)

点评

很好用, 谢谢提供!  详情 回复 发表于 2015-1-28 19:32
回复

使用道具 举报

59#
 楼主| 发表于 2015-1-28 19:32:27 | 只看该作者
roytam1 发表于 2015-1-28 19:13
稍微改進了一下minicmd:
- 可以直接用 "dir/w" 不用加空格了
- if 不再產生空行了

很好用, 谢谢提供!
回复

使用道具 举报

60#
发表于 2015-1-28 22:30:19 | 只看该作者
加入了變量替換的功能,
  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)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-7 07:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表