|
walu
高级用户
积分 916
发帖 201
注册 2003-5-4
状态 离线
|
『第
16 楼』:
我查了一下,应该是第二个文件中的 if "%lable%"=="BACKUP" set BackDrive=%1
出错,我是这样试的(换了一点): if "%lable%"=="BACKUP" goto yes 然后它不会跳到YES段。不知对否?
|
|
2004-4-9 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
17 楼』:
你要确认你的分区的卷标确实是BACKUP,你可以单独测试这几个批处理文件的每一行命令是否工作正常(将批处理前面的@echo off)去掉,然后运行时查看运行的命令行及结果就可以诊断出故障原因了。
我只是根据理论上的可行性写了这么几个批处理文件,我并没有亲自测试,因为我用不到。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-10 00:00 |
|
|
walu
高级用户
积分 916
发帖 201
注册 2003-5-4
状态 离线
|
『第
18 楼』:
按照你的分析方法分析了一下,果然出错的是
if "%lable%"=="BACKUP" set BackDrive=%1
这一行,无论ChkLabel哪个分区,也不管分区卷标是什么,这一行都是返回同样的结果。
如C盘的卷标是SYS,ChkLabel C: 后,变成
if "%lable%"=="BACKUP" set BackDrive=c:
如果D盘卷标是SOFT,ChkLabel D: 后,变成
if "%lable%"=="BACKUP" set BackDrive=d:
所以这个问题又回到了我最初提出的“通过你的程序得知C盘的label是SYS,但这都我们肉眼所看到的呀,批处理又不会识别只要label是SYS就向它复制文件”
这个文件(即以下几行)
vol %1 | grep drive | lmod /L1 set label=[$!] > temp.bat
call temp.bat
del temp.bat
set BackDrive= ←这一行倒是会正确显示卷标
if "%lable%"=="BACKUP" set BackDrive=%1 ←实际这一行是根本是不起作用的
|
|
2004-4-10 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
19 楼』:
兄弟呀,我粗心犯些错误也是难免的,难道你就不能认真一些?你有没有发觉上面的最后一句:
if "%lable%"=="BACKUP" set BackDrive=%1
中有一个明显的错误,那就是将%label%错写成了%lable%,我当时因为着急打错了,而你调试了这么长时间竟然没有发现,真不知道你是怎么调试的。
我重新修改了前面帖子中写的ChkLabel.bat,你再用新的试一下。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-11 00:00 |
|
|
walu
高级用户
积分 916
发帖 201
注册 2003-5-4
状态 离线
|
『第
20 楼』:
错误依旧,if "%lable%"=="BACKUP" set BackDrive=%1 这一行,无论ChkLabel哪个分区,也不管分区卷标是什么,这一行都是返回同样的结果。
|
|
2004-4-11 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
21 楼』:
你的错误仍然没有改正过来,我晕。
看我前面的帖子好吗?
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
cdl
中级用户
bbpc
积分 340
发帖 107
注册 2004-4-11
状态 离线
|
『第
22 楼』:
diskedit是个好工具
|
x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/ |
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
23 楼』:
没看清题意请不要乱灌。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
walu
高级用户
积分 916
发帖 201
注册 2003-5-4
状态 离线
|
『第
24 楼』:
if "%lable%"=="BACKUP" set BackDrive=%1
这是我发帖时粘原来的,我测试时是用
if "%label%"=="BACKUP" set BackDrive=%1
测试结果真的和原来一样的错误
|
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
25 楼』:
你翻回去看我前面的帖子吗?我修改过了,使用另一种形式就行操作,你再用新的ChkLabel.bat试一下。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
26 楼』:
打开附件
非逼着我亲自试一下(不过亲自试的过程中确实发现了批处理中的一些小bug,但方案绝对是可行的),上面的附件就是最后的结果。
将附件下载下去,然后解开,共有三个批处理文件:
IsReady.bat
ChkLabel.bat
FindBack.bat
其实,FindBack.bat应该改成FindLbl.bat。
用法:假设你要找一个分区卷标为backup的盘符,则输入以下命令:
FindBack backup
另外,你可以自己修改FindBack.bat中_found段的内容,在找到该盘符后做某个操作。
经过完善,在输入卷标时不用关心大写小写,批处理中会自动将卷标全部转换成大写进行比较。
上述程序在Windows xp的DOS方式下测试通过,其它环境未加测试(因为也没有别的环境)。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
27 楼』:
注意,上述批处理文件只能运行在英文系统中才能正确找到卷标,如果vol命令是中文提示,还要再对批处理文件进行适当修改。我刚才发觉在中文的Windows 2000中运行Vol命令运行结果为:
C:\>vol c:
驱动器 C 中的卷是 HDA1_W2KP
卷的序列号是 0000-8DFE
而在我的Windows XP英文版运行相同的命令运行结果却是:
d:\TEMP>vol c:
Volume in drive C is HDA3_XPEN
Volume Serial Number is 3CE3-C65F
运行结果有明显的区别,一个为中文提示,一个为英文提示,而我上面提供的批处理文件只能正确运行于英文提示下,如果是中文提示,需要修改ChkLable.bat中的这一行:
vol %chkdrv% | grep drive | lmod /L1 [$!] | lmod /L1 set label=[U] > temp.bat
将上面一行中的grep drive修改为grep 驱动器(也是理论上的,因为没有测试),即:
vol %chkdrv% | grep 驱动器 | lmod /L1 [$!] | lmod /L1 set label=[U] > temp.bat
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
28 楼』:
在win2000中文版下又试了一下,由于lmod不支持中文代码页,所以在运行lmod后提示会变成英文,所以不存在上面帖子所述的兼容性问题,但FindBack.bat还是要进行适当的修改,修改成下面这样(其中加黑的那一行为新增内容,其它行没有变化):
@echo off
SET ToFind=%1
:: 下面一行定义你要查找的分区卷标
if "%ToFind%"=="" set ToFind=BACKUP
lmod > nul
echo %ToFind% | lmod /L1 set ToFind=[U] > temp.bat
call temp.bat
del temp.bat
set drives=
for %%D 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 Call IsReady %%D
set BackDrive=
for %%D in (%drives%) DO call ChkLabel.bat %%D
if not "%BackDrive%"=="" goto _found
goto _notfound
:_found
echo 找到%ToFind%分区在盘符%BackDrive%,准备对该盘进行操作
echo Found %ToFind% Partition at Drive %BackDrive%, prepare to operate on it.
::下面定义你自己的操作
::copy FileToBackup %BackDrive%\
::if exist %BackDrive%\FiletoBackup echo Backup Successfully!
goto _quit
:_notfound
echo Error: 我不能找到你的%ToFind%分区!
echo Error: I cannot find the "%ToFind%" Partition.
pause
:_quit
set drives=
set BackDrive=
set label=
set ToFind=
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-12 00:00 |
|
|
walu
高级用户
积分 916
发帖 201
注册 2003-5-4
状态 离线
|
『第
29 楼』:
谢谢 Climbing 的热心与耐心!
原来你的批处理是在WINDOWS下运行的,弄得我一直在虚拟机的纯DOS下测试,怪不得得到的结果与你不同。呵呵,虽然现在也用不着,但 Climbing 兄的这种热心耐心实在令人钦佩!
|
|
2004-4-12 00:00 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
30 楼』:
我的批处理不止是可以运行于Windows下,在纯dos环境中也没有问题的,上午刚试过了。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2004-4-13 00:00 |
|