中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何用软盘启动DOS7.1后,获得硬盘上WINXP/2K/2K3系统的安
« [1] [2] »
作者:
标题: [求助]如何用软盘启动DOS7.1后,获得硬盘上WINXP/2K/2K3系统的安 上一主题 | 下一主题
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『楼 主』:  [求助]如何用软盘启动DOS7.1后,获得硬盘上WINXP/2K/2K3系统的安

        我想写个批处理,自动复制故障机(不能启动的XP/2K/2K3机器)上的一些系统文件,如SYSTEM32目录下的一些文件,但不知道用何命令可找到XP/2K/2K3故障机的系统路径(安装目录)?



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-19 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

如果你的系统没有安装在NTFS分区上,你可以从boot.ini中取得安装路径。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 3 楼』:  

你可以从boot.ini中取得安装路径。------------------------------十分感谢!我找了一个安装在c:\windows下的xp,它的boot.ini如下:[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect是用其中的“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS”来判断吧?我的批处理功底很差,如何把上面的表示成DOS7.1可以识别的“路径”即c:\windows?如何写批处理?如何从BOOT.INI中提取这部分?如果系统不是安装在c:,又如何找到BOOT.INI?



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

在DOS中,盘符与分区往往无法建立固定的联系,也就是说,你无法根据boot.ini中nt所在的分区来确定它在哪个盘符上。所以你写这个批处理,只能从boot.ini中取得你的NT系统安装在哪个目录下,例如在本例中,你的XP安装在Windows目录下,至于是当前的哪个盘符,你只好用穷举法来搜寻(有可能发生重复,例如:你的系统中安装了两套XP系统),方法如下:for %%I in (C D E F G H I J K L M N ...) do if exist %%I:\%windir%\system32\config\sam call backup.bat %%I总之,编写一个批处理不可能照顾到所有的情况,只能根据实际情况来进行调整。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 5 楼』:  

以前面为例,那如何从BOOT.INI中提取出\WINDOWS?

[此贴子已经被作者于2004-9-20 19:42:08编辑过]






Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 6 楼』:  

当然要用lmod了,呵呵,如下:type c:\boot.ini | find "Microsoft" | lmod /L1 /B()\= set wdir=[$9] > temp.bat
call temp.bat
del temp.bat

执行完成后,wdir中保存的就是WINDOWS或者WINNT(Windows安装目录的名字)。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 7 楼』:  

问题基本解决.再次感谢Climbing!--------------------------------------主程序:@ECHO OFF
CALL TestDrv.bat C D E F G H I J K L M N O P Q R S T U V W X Y Z
IF %SDrv%*==* GOTO errbootset wdir=
type %SDrv%:\boot.ini | find "Microsoft" | lmod /L1 /B()\= set wdir=[$9] > temp.bat
call temp.bat
del temp.batECHO SET WINDIR=%SDrv%:\%wdir% >TEMP.BAT
CALL TEMP.BAT
DEL TEMP.BAT :errboot
echo no system file: boot.ini !:exit
-----------------------------------------------TestDrv.bat子程序@ECHO OFF
SET SDrv=
:LOOP
DReady %1
IF NOT ERRORLEVEL 1 IF EXIST %1:\BOOT.INI GOTO FOUND
SHIFT
IF %1*==* GOTO END
GOTO LOOP:FOUND
SET SDrv=%1
:END-----------------------------------------------运行后,WINDIR即为我想要的"系统安装目录". 我从坛子里抄的一些,能给看看还有问题吗?如果是NTFS分区,是否只需加上NTFSPRO 包即可?这一句:  lmod /L1 /B()\= set wdir=[$9]  可以解释一下吗?



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-22 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 8 楼』:  

我觉得你写的还是有些问题,Boot.ini所在的分区不一定是Windows NT的安装分区,例如,有很多人将98安装在C:盘,然后将xp安装在D:盘,两者共用同一个主分区,这样,Boot.ini在C盘,但WINNT目录却是在D:盘,所以你的批处理运行肯定是有局限的。关于NTFS Pro,我不知道dready能不能处理NTFS Pro虚拟出来的盘符,你只好试一下了。lmod 的用法你可以查lmod的说明,在Horst的主页上可以下载到完整的说明。/L1: 是指第一行
/B()\=  :以()\=作为元变量的分隔符
set wdir=[$9]  : 其中的[$9]是指第9个元变量,也就是boot.ini中Windows目录名。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-22 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 9 楼』:  

我又加了一个"判断系统安装在哪一个驱动器上"的子程序TESTSYSD.BAT,枚举c-z,看是否有\SYSTEM32\CONFIG\SAM 文件来判断。
修改后的如下:
主程序:MAIN.BAT
@ECHO OFF
CALL TestBOOT.bat C D E F G H I J K L M N O P Q R S T U V W X Y Z
IF %BOOTDrv%*==* GOTO errboot
set WDIR=
type %BOOTDrv%:\boot.ini | tfind "Microsoft" | lmod /L1 /B()\= set wdir=[$9] > temp.bat
call temp.bat
del temp.bat
CALL TESTSYSD.BAT C D E F G H I J K L M N O P Q R S T U V W X Y Z
ECHO SET WINDIR=%SYSDrv%:\%WDIR% >TEMP.BAT
CALL TEMP.BAT
DEL TEMP.BAT
GOTO EXIT
:errboot
echo no system file: boot.ini !
:EXIT
-----------------------

子程序:TestBOOT.bat
@ECHO OFF
SET BOOTDrv=
:LOOP
DReady %1
IF NOT ERRORLEVEL 1 IF EXIST %1:\BOOT.INI GOTO FOUND
SHIFT
IF %1*==* GOTO END
GOTO LOOP
:FOUND
SET BOOTDrv=%1
:END
--------------------------
子程序:TESTSYSD.BAT
@ECHO OFF
SET SYSDrv=
:LOOP
DReady %1
IF NOT ERRORLEVEL 1 IF EXIST %1:\%WDIR%\system32\config\SAM GOTO FOUND
SHIFT
IF %1*==* ECHO "NOT FOUND SYSTEM FILES!"
EXIT
GOTO LOOP
:FOUND
SET SYSDrv=%1
:END

=======================================
变量含义:
BOOTDrv:BOOT.INI文件所在驱动器
SYSDrv:系统所在驱动器
WDIR:系统所在目录
WINDIR:系统所在驱动器+系统所在目录

[此贴子已经被作者于2004-9-25 12:13:27编辑过]






Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-25 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
死性不改
中级用户




积分 378
发帖 88
注册 2004-5-5
状态 离线
『第 10 楼』:  

既然需要查找sam,那么何必通过boot.ini来判断呢?这不是多此一举?何况,如果双系统为2000+XP/2003那么既有winnt也有windows,你要那一个?如果你确定故障机只采用windows和winnt这些系统的默认目录,那么,一个确定sam文件路径的批处理,不就同时确定了系统的目录了吗?[em05]



www.51ct.net
2004-9-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 11 楼』:  

大师,你终于来了。我的批处理中考虑了:故障机不一定是采用windows和winnt这些系统的默认目录的。处理过程是,先找到BOOT.INI所在的盘,打开BOOT.INI用LMOD取系统的安装目录%WDIR%。然后再枚举所有可能的硬盘C-Z,看哪个盘上有%WDIR%\system32\config\SAM 文件来确定系统盘符%SYSDRV%。这样就可以得到最终的系统安装路径 :%SYSDRV%+%WDIR%。用该方法肯定有不可靠的地方,不知 不改大师 有何高招?



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-25 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
死性不改
中级用户




积分 378
发帖 88
注册 2004-5-5
状态 离线
『第 12 楼』:  

boot.ini中不一定有"Microsoft",有些人喜欢个性化。还不如用dir  /b /s来直接获得文件路径,虽然执行速度可能会慢得多。



www.51ct.net
2004-9-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 13 楼』:  

如果用批处理要考虑各种特殊情况或者使用者的个性化,那干脆就不要写批处理了。用人工是可以适应任何情况的变化的。这很多时候也是无可奈何的事情。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-26 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 14 楼』:  

如果用批处理要考虑各种特殊情况或者使用者的个性化,那干脆就不要写批处理了。用人工是可以适应任何情况的变化的。这很多时候也是无可奈何的事情。
----------
不知哪有这种功能的程序呢?找到就好了,我就不写了。
我的批处理还有两个问题:
1是不改说的boot.ini中不一定有“Microsoft”,比如boot.ini被人为的修改过。(这种情况确实不好搞,还要对BOOT.INI文件的格式进一步分析)
2是装有两个以上的xp/2k/2k3.(这种情况,我只想找默认启动的即可)

[此贴子已经被作者于2004-9-26 11:27:59编辑过]






Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-9-26 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 15 楼』:  

如果你只想找默认启动项就简单了,因为你可以用“default=multi”作为find命令的关键字,不过还要修改一下lmod的参数。例如:type c:\boot.ini | find "default=multi" | lmod /L1 /B=()\ set wdir=[$10]  > temp.bat



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-9-26 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: