|
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
状态 离线
|
|
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 |
|