中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何在特定条件下获得纯DOS下最后硬盘盘符?
« [1] [2] »
作者:
标题: [求助]如何在特定条件下获得纯DOS下最后硬盘盘符? 上一主题 | 下一主题
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『楼 主』:  [求助]如何在特定条件下获得纯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 除外)

注:不使用第三方软件

谢谢!

2008-11-25 23:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

对纯DOS不太熟悉,请教几个问题:
请问纯DOS方式下可以使用WMIC吗?你给的这段代码在纯DOS方式下能得到正确结果吗?你是用的纯DOS是哪个版本呢?



2008-11-25 23:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by HAT at 2008-11-25 11:14 PM:
对纯DOS不太熟悉,请教几个问题:
请问纯DOS方式下可以使用WMIC吗?你给的这段代码在纯DOS方式下能得到正确结果吗?你是用的纯DOS是哪个版本呢?

原相关帖子里我说的很清楚也有些朋友会看错,这次问这个问题我索性贴上相关的贴子就是不想再多说了(因为会说的比较长)。

原意是:在CMD的环境里获得在纯DOS环境(不加载读写NTFS格式软件)下所查找到的最后分区盘符,一个硬盘、分区混合FAT32、NTFS。现在为了可以在安装XP时自动运行,所以需要放弃WMIC,HAT版主不妨查看一下那条相关帖子里的详细提问内容,谢谢!

2008-11-26 08:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 4 楼』:  

xp下的结果与dos下的,是毫不相干的两码事。
不知楼主说得是啥,想要干嘛。呵呵。



Windows 一键还原
http://www.yjhy.com
2008-11-26 08:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 5 楼』:  


@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
)
纯!

2008-11-26 11:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 6 楼』:  



  Quote:
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 ]

2008-11-26 11:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 7 楼』:  



  Quote:
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^> ...

可否只检测硬盘?这里连光驱盘符也包含了。

2008-11-26 11:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 8 楼』:  

本来以下代码可以实现,但我不想使用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


2008-11-26 11:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 9 楼』:  

流程:检测各个分区的格式,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


2008-11-26 12:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 10 楼』:  

@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

2008-11-26 12:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 11 楼』:  

这样U盘也算在内.

2008-11-26 13:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 12 楼』:  

dos下的最后盘符,不到dos下去确定,而在window下确定,是不合理的。



Windows 一键还原
http://www.yjhy.com
2008-11-26 14:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 13 楼』:  



  Quote:
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 ]

2008-11-26 15:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by lianjiang2004 at 2008-11-26 02:53 PM:
dos下的最后盘符,不到dos下去确定,而在window下确定,是不合理的。

在WindowsXP安装时识别纯DOS最后分区作为某个参数写入GHOST的参数文件,使用虚拟软盘启动时也要识别纯DOS最后分区,使GHOST支持一键备份和恢复。

2008-11-26 15:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 15 楼』:  

只是提出个人的看法和理解,至于如何使用,就是你自己的事了,呵呵。



Windows 一键还原
http://www.yjhy.com
2008-11-26 15:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: