标题: [求助]如何在特定条件下获得纯DOS下最后硬盘盘符?
[打印本页]
作者: chishingchan
时间: 2008-11-25 23:06
标题: [求助]如何在特定条件下获得纯DOS下最后硬盘盘符?
其实这个已经有答案,但是使用了WMIC命令作成的。
http://www.cn-dos.net/forum/viewthread.php?tid=36433&fpage=1
:: 获取纯DOS方式的最后盘符
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem ^| find /c "FAT"') do set doslastdrive=!drives:~%%i,1!:
要求:
1、无需过渡文件;
2、只使用XP自带的内外部(WMIC 除外)
注:不使用第三方软件
谢谢!
作者: HAT
时间: 2008-11-25 23:14
对纯DOS不太熟悉,请教几个问题:
请问纯DOS方式下可以使用WMIC吗?你给的这段代码在纯DOS方式下能得到正确结果吗?你是用的纯DOS是哪个版本呢?
作者: chishingchan
时间: 2008-11-26 08:09
Originally posted by HAT at 2008-11-25 11:14 PM:
对纯DOS不太熟悉,请教几个问题:
请问纯DOS方式下可以使用WMIC吗?你给的这段代码在纯DOS方式下能得到正确结果吗?你是用的纯DOS是哪个版本呢?
原相关帖子里我说的很清楚也有些朋友会看错,这次问这个问题我索性贴上相关的贴子就是不想再多说了(因为会说的比较长)。
原意是:在CMD的环境里获得在纯DOS环境(不加载读写NTFS格式软件)下所查找到的最后分区盘符,一个硬盘、分区混合FAT32、NTFS。现在为了可以在安装XP时自动运行,所以需要放弃WMIC,HAT版主不妨查看一下那条相关帖子里的详细提问内容,谢谢!
作者: lianjiang2004
时间: 2008-11-26 08:24
xp下的结果与dos下的,是毫不相干的两码事。
不知楼主说得是啥,想要干嘛。呵呵。
作者: wangff
时间: 2008-11-26 11:16
@echo off
setlocal enabledelayedexpansion
set bb=
for %%i 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 (
set aa=
for /f "tokens=*" %%a in ('dir %%i:\#### 2^>^&1^|findstr /I "specified 指"') do set aa=%%a
if not "!aa!"=="" (
echo !bb!:
goto :eof
)
set bb=%%i
)
纯!
作者: chishingchan
时间: 2008-11-26 11:46
Originally posted by lianjiang2004 at 2008-11-26 08:24 AM:
xp下的结果与dos下的,是毫不相干的两码事。
不知楼主说得是啥,想要干嘛。呵呵。
举个例子:
C: FAT32
D: FAT32
E: NTFS
F: FAT32
G: FAT32
CMD 下获取最后的盘符当然是 G: 了,但我需要在CMD下知道此G:盘当在纯DOS下的盘符是什么。这里一看就会知道纯DOS(不加载NTFS读写及只有一硬盘的情况下)下的盘符是F:了,因为NTFS纯DOS是查看不了的。
现在明白吗?
问题就是:在CMD环境下要知道当在纯DOS下最后的硬盘分区应该是什么?
[
Last edited by chishingchan on 2008-11-26 at 11:48 ]
作者: chishingchan
时间: 2008-11-26 11:47
Originally posted by wangff at 2008-11-26 11:16 AM:
[code]@echo off
setlocal enabledelayedexpansion
set bb=
for %%i 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 (
set aa=
for /f "tokens=*" %%a in ('dir %%i:\#### 2^> ...
可否只检测硬盘?这里连光驱盘符也包含了。
作者: chishingchan
时间: 2008-11-26 11:50
本来以下代码可以实现,但我不想使用WMIC,硬盘分区FAT32及NTFS的请测试。
@echo off
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem ^| find /c "FAT"') do set doslastdrive=!drives:~%%i,1!:
echo DOS 下最后分区盘符是 %doslastdrive%。
for /f %%a in ('"wmic logicaldisk where DriveType="3" get DeviceID |find /v "DeviceID""') do set cmdlastdrive=%%a
echo CMD 下最后分区盘符是 %cmdlastdrive%。
pause
作者: chishingchan
时间: 2008-11-26 12:29
流程:检测各个分区的格式,num 的值是统计 FAT32 分区的个数
自己编了一个,错误的,请高手改正:
@echo off
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for %%i 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 (
for /f "tokens=2" %%a in ('chkntfs %%i:^|findstr /i "FAT32"') do (
if "%%a"=="FAT32。" set num+=1
)
)
set doslastdrive=!drives:~%num%,1!:
echo %doslastdrive%
pause
作者: wangff
时间: 2008-11-26 12:47
@echo off
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for %%i 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 (
set aa=
for /f "tokens=*" %%a in ('chkntfs %%i:^|findstr /i "FAT32"') do (
if not "%%a"=="" set/a num+=1
)
)
set doslastdrive=!drives:~%num%,1!:
echo %doslastdrive%
pause
作者: wangff
时间: 2008-11-26 13:20
这样U盘也算在内.
作者: lianjiang2004
时间: 2008-11-26 14:53
dos下的最后盘符,不到dos下去确定,而在window下确定,是不合理的。
作者: chishingchan
时间: 2008-11-26 15:12
Originally posted by wangff at 2008-11-26 01:20 PM:
这样U盘也算在内.
以下代码不是很完美,在有光盘在光驱可避过U盘,刚好合适我这个精简的XP。因为此精简XP被记录到光盘上安装的。在安装过程剩余12分钟的时候执行。
@echo off
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for %%i 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 (
for /f "tokens=2" %%a in ('chkntfs %%i:^|findstr /i "文件系统的类型是"') do (
if "%%a"=="RAW。" goto :end
if "%%a"=="FAT32。" set /a num+=1
)
)
:end
set doslastdrive=!drives:~%num%,1!:
echo %doslastdrive%
pause
期待更好的批处理。
[
Last edited by chishingchan on 2008-11-26 at 15:14 ]
作者: chishingchan
时间: 2008-11-26 15:18
Originally posted by lianjiang2004 at 2008-11-26 02:53 PM:
dos下的最后盘符,不到dos下去确定,而在window下确定,是不合理的。
在WindowsXP安装时识别纯DOS最后分区作为某个参数写入GHOST的参数文件,使用虚拟软盘启动时也要识别纯DOS最后分区,使GHOST支持一键备份和恢复。
作者: lianjiang2004
时间: 2008-11-26 15:59
只是提出个人的看法和理解,至于如何使用,就是你自己的事了,呵呵。
作者: longge0000
时间: 2008-11-26 21:42
真晕,说纯DOS了,NTFS和隐藏分区的盘符在纯DOS下都算没有,
查到的最后盘符对GHOST都没有!!!
FINDRAMD.EXE这个文件就是查找实DOS下的盘符,大多数启动盘都有!!!!!
还用什么XP命令纯DOS下运行,我就不懂能运行!!!!!
[ Last edited by longge0000 on 2008-11-26 at 22:14 ]
作者: chishingchan
时间: 2008-11-26 22:15
标题: 之前还未完善的作品:或许大家看过后会明白
install.cmd
@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 (for /f %%h in ('fsutil fsinfo drivetype %%a:^|findstr /i "固定驱动器"') do set cmdlastdrive=%%h)
:: 如果最后分区是系统分区,退出
if %cmdlastdrive%*==%SystemDrive%* mshta vbscript:msgbox("备份分区不能用于安装系统!",0,"错误")(window.close)&&exit
:: 获取硬盘最后分区格式
for /f "tokens=2 delims=: " %%a in ('fsutil fsinfo volumeinfo %cmdlastdrive%\^|find "文件系统名"') do set cldformat=%%a
:: 如果分区不是FAT32格式,退出
if not %cldformat%*==FAT32* mshta vbscript:msgbox("备份分区只能使用FAT32格式!",0,"错误")(window.close)&&exit
:: 如果备份分区容量少于1GB,退出
for /f "tokens=2" %%a in ('chkdsk %cmdlastdrive%^|find "总"') do set size=%%a
if %size:,=% lss 1024000 mshta vbscript:msgbox("备份分区容量不能少于 1GB!",0,"错误")(window.close)&&exit
:: 建立备份恢复目录
if not exist %cmdlastdrive%\BACKUP\nul md %cmdlastdrive%\BACKUP
:: 获取系统分区标识
for /f "tokens=6 delims=()" %%a in ('type c:\boot.ini^|findstr /i "rdisk"') do @set rd=%%a
set /a rd+=1
for /f "tokens=8 delims=()" %%a in ('type c:\boot.ini 2^>nul^|findstr /i "partition"') do @set partition=%%a
:: 获取纯DOS方式的最后盘符
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem ^| find /c "FAT"') do set doslastdrive=!drives:~%%i,1!:
:: 设置备份文件:CREATE.TXT
>%cmdlastdrive%\BACKUP\CREATE.TXT echo -CLONE,MODE=PCREATE,SRC=%rd%:%partition%,DST=%doslastdrive%\BACKUP\H%rd%P%partition%.GHO
>>%cmdlastdrive%\BACKUP\CREATE.TXT echo -SKIP=\PAGEFILE.SYS
>>%cmdlastdrive%\BACKUP\CREATE.TXT echo -Z9
>>%cmdlastdrive%\BACKUP\CREATE.TXT echo -SURE
>>%cmdlastdrive%\BACKUP\CREATE.TXT echo -RB
:: 设置恢复文件:RESTORE.TXT
>%cmdlastdrive%\BACKUP\RESTORE.TXT echo -CLONE,MODE=PRESTORE,SRC=%doslastdrive%\BACKUP\H%rd%P%partition%.GHO:1,DST=%rd%:%partition%
>>%cmdlastdrive%\BACKUP\RESTORE.TXT echo -SURE
>>%cmdlastdrive%\BACKUP\RESTORE.TXT echo -RB
vfloppy.exe -1 c:\vloader.bin -2 c:\vmemdsk.bin -i c:\vfloppy.ima
:: 设置分区卷标名称
if not %SystemDrive%*==C:* label C: 启动
label %SystemDrive% 系统
label %cmdlastdrive% 备份
install.inf
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
CopyFiles = VirtualFloppy.CopyFiles
UpdateInis = boot.ini
[DestinationDirs]
VirtualFloppy.CopyFiles = 30
[VirtualFloppy.CopyFiles]
vfloppy.ima
vloader.bin
vmemdsk.bin
[boot.ini]
%30%\boot.ini,"operating systems",,"%30%\vloader.bin=""虚拟软盘:自动备份或恢复系统数据。 """
[
Last edited by chishingchan on 2008-11-26 at 22:31 ]
作者: chishingchan
时间: 2008-11-26 22:17
使用系统自带的 IEXPRESS.EXE 打包
:: 获取纯DOS方式的最后盘符 这段还未更改。
纯DOS部分:IMG 文件 2.8MB,包含GHOST.EXE 且有自动识别最后分区的功能
有更好的建议请赐教,谢谢!
[ Last edited by chishingchan on 2008-11-26 at 22:24 ]
作者: lianjiang2004
时间: 2008-11-27 08:18
自己能控制分区的机子,好办。
不能的话,如何处理,应是关键。
似乎类似问题几个月前讨论过。毫无结果。