中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问什么软件可以通过分区卷标名称查找分区?
« [1] [2] [3] »
作者:
标题: 请问什么软件可以通过分区卷标名称查找分区? 上一主题 | 下一主题
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: