中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理如何根据卷标确定分区盘符
« [1] [2] »
作者:
标题: [已结]批处理如何根据卷标确定分区盘符 上一主题 | 下一主题
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『楼 主』:  [已结]批处理如何根据卷标确定分区盘符

谁可以帮忙写一个批处理,原理大概是这样:某分区里面存有ghost的备份文件,不知道分区的盘符,但知道这个分区的卷标,如何根据硬盘分区的卷标(比如system)来判断这个分区的盘符(比如F),以便可以让ghost可以定位到具体的分区,读取gho文件恢复系统。
另外,虽然gho文件存放位置不固定(可能在第4 分区),但ghost是可以直接定位到某一个分区的,因此,如能用批处理判断gho文件在第几分区,应该也可以实现。
如能解答,非常感谢!!!

[ Last edited by HAT on 2008-11-10 at 15:11 ]

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





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

本版搜索"卷标",能够找到以下帖子:
http://www.cn-dos.net/forum/viewthread.php?tid=43521

请问楼主是如果搜索的呢?还是根本没有搜索?

Q: 如何使用论坛的搜索功能来解决自己的问题?
A: 参考:http://www.cn-dos.net/forum/viewthread.php?tid=44122#pid308085



2008-11-10 10:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 3 楼』:  

不好意思,我是搜索过的,只不过搜索关键词为:判断盘符,盘符。却没想到用卷标做关键词,是我太笨了,请版主见谅!谢谢!

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

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

2003下还可以用DISKPART
其它系统不知道支不支持。
需要开启磁盘管理服务。

DISKPART> select disk 0

磁盘 0 现在是所选磁盘。

DISKPART> DETAIL disk

WDC WD800BB-22JHA0
磁盘 ID: 624AA2E0
类型   : ATA
总线   : 0
目标   : 0
LUN ID : 0

  卷 ###      Ltr  卷标         Fs     类型        大小     状态       信息
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  卷 1         C                NTFS   磁盘分区         8 GB 状态良好     系统

  卷 2         D SOFTWARE       NTFS   磁盘分区        24 GB 状态良好

  卷 3         E MEDIA          NTFS   磁盘分区        24 GB 状态良好

  卷 4         F BACKUP         NTFS   磁盘分区        18 GB 状态良好

[ Last edited by yishanju on 2008-11-10 at 16:06 ]




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-11-10 16:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>DISKPART /?

Microsoft DiskPart version 5.1.3565

Copyright (C) 1999-2003 Microsoft Corporation.
On computer: HAT

Microsoft DiskPart syntax:
        diskpart [/s <script>] [/?]

        /s <script> - Use a DiskPart script.
        /?          - Show this help screen.



2008-11-10 16:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jh1688
中级用户





积分 248
发帖 126
注册 2008-5-30
状态 离线
『第 6 楼』:  

这是我(一个菜鸟)用本论坛的一些资料自己拼凑的小东东,FAT32格式下肯定可以用,NFST(可能拼错)格式我没有,不知道行不行,请楼主自己试一下,注意:只能用在纯DOS下,CMD窗口下肯定不行!!!!

if exist mini_dd.txt del mini_dd.txt
if exist test.txt del test.txt
minito /nohp /p /ifs>mini_dd.txt
strings lines=LINESIZE mini_dd.txt
strings lines=add %lines%,1
set line=1
:hfgho_1
strings line=add %line%,1
if %line%#==%lines%# goto hfgho_2
strings lined=read mini_dd.txt,%line%
strings row1=left %lined%,3
strings row3=mid %lined%,8,2
strings row5=mid %lined%,19,3
echo %row3% >>test.txt
goto hfgho_1
:hfgho_2
strings linesize=linesize test.txt
strings drv=read test.txt,1
strings linesize=add %linesize%,1
set number=1
:hfgho_3
if %number%#==%linesize%# goto hfgho_4
strings number=add %number%,1
strings drv=read test.txt,%number%
for %%i in (%drv%) do dir /a-d /b /s %%i\*.gho >nul >temp.txt
find /i ".gho" temp.txt >nul
type temp.txt | lmod set lastdrv=[] >temp.bat
call temp.bat >nul
goto hfgho_3
:hfgho_4
if %lastdrv%#==# goto hfqt_2
del test.txt >nul
del mini_dd.txt >nul
del temp.bat >nul
del temp.txt >nul
Ghost -clone,mode=pload,src=%lastdrv%:1,dst=%actp% -sure -fx
goto cqdn

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





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 7 楼』:  

不回复一下对不起大家。我根据HAT版主的提示找到了那个帖子,里面有2个批处理,分别测试了一下,xp系统下识别普通分区没问题。由于我的批处理是在pe下运行的,而且gho文件是存放在隐藏分区(进pe后会自动分配盘符),进一步在pe环境下测试,发现第一个批处理要用到wmic服务,而pe没加载,所以放弃了;第二个批处理用到了mountvol命令,发现隐藏分区虽然已经分配了盘符,mountvol命令还是无法识别,所以失败了。不过,给了我启发,正在研究怎么用for命令去实现。
刚才上来一看大家又说了一个diskpart,这个命令我稍了解,很强大,不过我不知道怎么用批处理来实现我的目的。只好暂时先放一边了。
再次感谢大家的帮忙。

2008-11-11 00:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 8 楼』:  

另外,6楼的批处理我看不大明白,比较复杂,而且是dos下的,无法采用,谢过了!

2008-11-11 00:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 9 楼』:  

经过摸索,终于成功,现把自己改写的批处理贴出来,请大家指点!

=========================
@echo off
echo c: >vol.txt
echo d: >>vol.txt
echo e: >>vol.txt
echo f: >>vol.txt
echo g: >>vol.txt
for /f %%i in (vol.txt) do (vol %%i | findstr /ic:"是 winxp">nul && set drive=%%i)
echo 卷标为winxp的盘符是%drive%
del vol.txt
pause
==========================

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





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  


@echo off
for %%a in (C D E F G) do (
  for /f "eol=卷 tokens=3*" %%i in ('vol %%a:') do (
    if /i "%%j"=="winxp" set drive=%%a & goto next
  )
)
:next
echo 卷标为 winxp 的盘符是 %drive%
pause
P.S.,不用判断存在哪些盘符和中英文系统吗?

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





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



  Quote:
Originally posted by yy169 at 2008-11-11 01:24:
经过摸索,终于成功,现把自己改写的批处理贴出来,请大家指点!

=========================
@echo off
echo c: >vol ...

兼容性欠佳。
当然,自己用是没问题的。



Windows 一键还原
http://www.yjhy.com
2008-11-11 08:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

下次提问,建议在顶楼把自己的真实环境和要求一次性描述清楚。



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





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

这样是不是简洁一些?
@echo off
for %%i in (c d e f g) do (
  vol %%i:|findstr /ic:"是 winxp">nul && set drive=%%i
)
echo 卷标为winxp的盘符是%drive%
pause




2008-11-11 09:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 14 楼』:  

回tireless:这个批处理的确没有考虑到存在哪些盘符和系统语言的问题,就盘符问题,我也在想怎么用批处理获取当前存在的盘符,暂时没答案。不过,由于硬盘是我自己分区的,所以盘符的范围我可以确定,把范围扩大一点应该就可以达到目的,虽然不是很理想。另外,由于是中文pe,所以也不再考虑系统语言问题了。谢谢你的提醒!

回lianjiang2004:正如你所言,我的批处理兼容性很差,因为没搜索所有可能存在的盘符。其原因跟我上面说的一样。之所以贴出来,一来抛砖引玉,二是要给大家一个结果。谢谢!

回HAT版主:接受你的批评和建议,还有你的简洁的批处理,谢谢!

2008-11-11 10:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yy169
初级用户





积分 30
发帖 18
注册 2007-5-26
状态 离线
『第 15 楼』:  

再次进行修改,可以检索所有已存在的盘符(除A、B)的卷标,代码如下,请大家指点!


@echo off
if exist vol.txt del vol.txt
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 (
     if exist %%i:\ echo %%i >> vol.txt
)
for /f %%i in (vol.txt)  do (
     vol %%i: | findstr /ic:"是 winxp">nul && set drive=%%i
)
echo 卷标为winxp的盘符是%drive%
del vol.txt>nul
pause

   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-12 09:48


2008-11-11 13:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: