![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 14:40 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]如何用软盘启动DOS7.1后,获得硬盘上WINXP/2K/2K3系统的安 |
| 可打印版本 4,800 / 24 |
| 第1楼 yzz163 | 发表于 2004-09-19 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
[求助]如何用软盘启动DOS7.1后,获得硬盘上WINXP/2K/2K3系统的安 我想写个批处理,自动复制故障机(不能启动的XP/2K/2K3机器)上的一些系统文件,如SYSTEM32目录下的一些文件,但不知道用何命令可找到XP/2K/2K3故障机的系统路径(安装目录)?
|
|
| 第2楼 Climbing | 发表于 2004-09-20 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
如果你的系统没有安装在NTFS分区上,你可以从boot.ini中取得安装路径。
|
|
| 第3楼 yzz163 | 发表于 2004-09-20 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
你可以从boot.ini中取得安装路径。------------------------------十分感谢!我找了一个安装在c:\windows下的xp,它的boot.ini如下:
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? |
|
| 第4楼 Climbing | 发表于 2004-09-20 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
在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总之,编写一个批处理不可能照顾到所有的情况,只能根据实际情况来进行调整。
|
|
| 第5楼 yzz163 | 发表于 2004-09-20 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
以前面为例,那如何从BOOT.INI中提取出\WINDOWS?
|
|
| 第6楼 Climbing | 发表于 2004-09-20 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
当然要用lmod了,呵呵,如下:type c:\boot.ini | find "Microsoft" | lmod /L1 /B()\= set wdir= > temp.bat
call temp.bat del temp.bat 执行完成后,wdir中保存的就是WINDOWS或者WINNT(Windows安装目录的名字)。 |
|
| 第7楼 yzz163 | 发表于 2004-09-22 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
问题基本解决.再次感谢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= > 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= 可以解释一下吗? |
|
| 第8楼 Climbing | 发表于 2004-09-22 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
我觉得你写的还是有些问题,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个元变量,也就是boot.ini中Windows目录名。 |
|
| 第9楼 yzz163 | 发表于 2004-09-25 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
我又加了一个"判断系统安装在哪一个驱动器上"的子程序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= > 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:系统所在驱动器+系统所在目录 |
|
| 第10楼 死性不改 | 发表于 2004-09-25 00:00 |
| 中级用户 发帖 88 积分 378 | |
|
既然需要查找sam,那么何必通过boot.ini来判断呢?这不是多此一举?何况,如果双系统为2000+XP/2003那么既有winnt也有windows,你要那一个?如果你确定故障机只采用windows和winnt这些系统的默认目录,那么,一个确定sam文件路径的批处理,不就同时确定了系统的目录了吗?
|
|
| 第11楼 yzz163 | 发表于 2004-09-25 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
大师,你终于来了。我的批处理中考虑了:故障机不一定是采用windows和winnt这些系统的默认目录的。处理过程是,先找到BOOT.INI所在的盘,打开BOOT.INI用LMOD取系统的安装目录%WDIR%。然后再枚举所有可能的硬盘C-Z,看哪个盘上有%WDIR%\system32\config\SAM 文件来确定系统盘符%SYSDRV%。这样就可以得到最终的系统安装路径 :%SYSDRV%+%WDIR%。用该方法肯定有不可靠的地方,不知 不改大师 有何高招?
|
|
| 第12楼 死性不改 | 发表于 2004-09-25 00:00 |
| 中级用户 发帖 88 积分 378 | |
|
boot.ini中不一定有"Microsoft",有些人喜欢个性化。还不如用dir /b /s来直接获得文件路径,虽然执行速度可能会慢得多。
|
|
| 第13楼 Climbing | 发表于 2004-09-26 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
如果用批处理要考虑各种特殊情况或者使用者的个性化,那干脆就不要写批处理了。用人工是可以适应任何情况的变化的。这很多时候也是无可奈何的事情。
|
|
| 第14楼 yzz163 | 发表于 2004-09-26 00:00 |
| 中级用户 发帖 96 积分 335 | |
|
如果用批处理要考虑各种特殊情况或者使用者的个性化,那干脆就不要写批处理了。用人工是可以适应任何情况的变化的。这很多时候也是无可奈何的事情。
---------- 不知哪有这种功能的程序呢?找到就好了,我就不写了。 我的批处理还有两个问题: 1是不改说的boot.ini中不一定有“Microsoft”,比如boot.ini被人为的修改过。(这种情况确实不好搞,还要对BOOT.INI文件的格式进一步分析) 2是装有两个以上的xp/2k/2k3.(这种情况,我只想找默认启动的即可) |
|
| 第15楼 Climbing | 发表于 2004-09-26 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
如果你只想找默认启动项就简单了,因为你可以用“default=multi”作为find命令的关键字,不过还要修改一下lmod的参数。例如:type c:\boot.ini | find "default=multi" | lmod /L1 /B=()\ set wdir= > temp.bat
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |